以两个字节存储日期

时间:2015-08-21 15:24:11

标签: c date bitwise-operators

我正在读一本让我们来C书,在那里以两个字节存储日期公式是

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

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

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

有人可以解释我上面的公式。 提前谢谢。

1 个答案:

答案 0 :(得分:3)

以上表格只存储5位数的日期(1-31或0-30),4位数字的月份(0-11或1-12)以及7位数字的年份仅存储2个字节

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

我建议你避免使用负值,因为有符号值的右移由标准定义为实现依赖,所以你不知道新位是用1填充还是用0填充。所以即使要处理否定值,请始终使用unsigned short为2字节值或uint16_t进行确定性更改。