gpt4 book ai didi

c - 以两个字节存储日期

转载 作者:行者123 更新时间:2023-11-30 18:30:13 26 4
gpt4 key购买 nike

我正在读一本 Let us C 书,里面有用两个字节存储日期的公式

int year = 1990, month = 03, day=22

date = 512*(year-1980)+32*month+day

我不明白上面的公式,比如为什么要从给定年份中减去 1980 年并乘以 512,然后乘以 32 与月份并加上日期。

有人可以解释一下上面的公式吗?提前致谢。

最佳答案

上面的公式只是将日(1-31或0-30)存储在5位数字中,月份(0-11或1-12)存储在4位数字中,年份存储在7位数字中,仅用2个字节存储.

这里的纪元是1980年,这意味着1980年到2127年之间一​​切都会好起来。我的建议是避免负值并选择合适的开始年份。例如,date = 512*(year-1950)+32*month+day 适用于 1950 到 2077 年间的年份。

我建议您避免负值,因为有符号值的右移由标准定义为依赖于实现,因此您无法知道新位将填充 1 还是 0。所以即使如果您想要处理值,请始终使用无符号短作为2字节值或uint16_t以获得确定性移位。

关于c - 以两个字节存储日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32144076/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com