在《以C#之音编程》一书中,作者给出了一个例子(包含源代码),展示了如何将日期(年、月、日——以数字形式表示)打包到32位整数中。在这个例子中,作者按照以下方式打包信息:
如果我理解得正确,左移9位只能给我们一个512的值(如果计算每个位数,则为1023)。但是,当运行程序时,我注意到像2014(年份)这样的值可以被存储。这是怎么可能的,因为这个值很小?我是否误解了代码中的某一部分?无论我读、看还是玩弄代码都没有帮助我澄清这个问题。
int iDate = (iYear << 9) | (iMonth << 5) | iDay;
如果我理解得正确,左移9位只能给我们一个512的值(如果计算每个位数,则为1023)。但是,当运行程序时,我注意到像2014(年份)这样的值可以被存储。这是怎么可能的,因为这个值很小?我是否误解了代码中的某一部分?无论我读、看还是玩弄代码都没有帮助我澄清这个问题。