gpt4 book ai didi

C# - 包装日期、月份、年份

转载 作者:行者123 更新时间:2023-11-30 14:30:33 28 4
gpt4 key购买 nike

在 Programming in the Key of C# 中,作者给出了一个示例(附源代码),说明如何将日期(年、月、日 -- 数字)打包为 32 位整数。在示例中,作者将信息打包如下:

int iDate = (iYear << 9) | (iMonth << 5) | iDay;

如果我正确理解这一点,左移 9 只得到 512 的值(如果计算每个位的位置,则为 1023)。但是,我注意到在运行程序时可以存储 2014(年)等值。这么小的值怎么可能呢?我误解了这段代码吗?阅读、观看或玩弄代码并没有帮助我清除空气中的空气。

最佳答案

移位并不代表年份可以取的最大值(即使您在计算中犯了错误,这也不是我们向左移位 9 的原因)。 shift 允许您定义将用于每个值的范围。下面是一个 ascii,它显示了值被移动后如何在 Int32 中组织值

11111111111111111111111 1111 11111
-----------yyyyyyyyyyyY mmmM ddddD

由于一天的值最多为 31,因此 5 位就足够了(32 个可能的值)。对于这个月,我们将需要 4 位(16 个可能的值)来容纳我们的 12 种可能性。如果我们希望我们的智能日期方案在 2048 年之后继续,那么年份至少需要 12 位。我们在左边还有一些空间可以持续很长时间。

这就是为什么我们将月份值移动 5 次,将年份值移动 9 次。这也是 Int16 不够的原因,我们需要比 16 位更多的位来存储我们的日期

关于C# - 包装日期、月份、年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22575955/

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