我正在读一本让我们来C书,在那里以两个字节存储日期公式是
int year = 1990, month = 03, day=22
date = 512*(year-1980)+32*month+day
我不明白上面的公式,比如为什么1980年从给定年份减去并乘以512然后乘以32乘以月份并加上日期。
有人可以解释我上面的公式。 提前谢谢。
答案 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
进行确定性更改。