以两个字节存储日期

Storing date in two bytes

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

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

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

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

谁能解释一下上面的公式。 提前致谢。

上面的公式只存了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. 所以即使你想处理 negative 值,总是使用 unsigned short 为你 2 字节值或 uint16_t 有确定性的转变。