3 回答
TA贡献1818条经验 获得超11个赞
使用零开始计数实际上是Assembly程序员的一种优化技巧。他们没有将1分配给计数寄存器,而是对其进行了异或运算,这在CPU周期中略快。这意味着计数将从0开始,并且始终取决于元素的长度(不包括最后一个元素)。
另外,在指针算术中也使用零,在这种情况下,您将使用一个基本指针指向某些已分配的内存,再加上第二个指针,该指针与该基本指针的偏移量。在这里,使用零值将偏移量指向存储块的基数很有意义。(一般的数组逻辑往往是基地址加上偏移量x记录大小。)
从零开始的月份数字?通常,许多编程环境自某些默认数据起将数据计算为几天。1899年12月31日是一个受欢迎的日期,尽管还有许多其他日期用作基准日期。所有其他日期都偏离此基准,并且将仅存储为一个数字。分数将用于表示小时,分钟和秒,其中0.25表示24/4 = 6小时。因此,要将日期转换为真实日期,所有环境要做的就是将此数字转换为真实日期。
但是,从零开始的数组和从1开始的月份值的组合确实带来了问题。要获取第9个月的月份名称,您必须从month数组中获取第8项。一些开发人员会很乐意在获得名称之前减少月份数。其他人则倾向于将月份更改为从零开始的格式,因为人们只想知道名称,而不是数字。这是个人观点。
TA贡献1798条经验 获得超3个赞
就是这样,基于此假设而构建的巨大软件意味着这将持续一段时间。
我的看法是这是C的错,所有其他后来才出现的语言也都遵循了C。
您会从不了解的人那里得到一些有趣的情况。我们的团队发现的少数Y2K错误之一是一个网站,自豪地宣称年份是19100,因为它们在struct tm
年份之前加上了文字“ 19”。
TA贡献1809条经验 获得超8个赞
是的,罗马人也有零问题。
这只是数学(是程序设计的重要组成部分,尤其是早期程序设计)的[非直觉]结果,将零定义为第一个(有问题的术语是一个)实数,正 *自然数,并且由于数组使用实数进行了索引,自然数,“第一个”元素位于索引0。
月实际上是数组中的命名值,其中天和年是编号的值-将天/年看成看起来像{“ 1”,“ 2”,“ 3”,...的数组可能会更有用。 .. } 他们自己。
至于为什么这是如此普遍(除了在数学上是正确的),您列出的所有语言都是出于同一原因而起源的……
编辑:
进一步研究它,这个Wikipedia链接详细说明了零索引的几个好而有趣的原因(它并没有直接说明为什么月被零索引了,但我认为已经涵盖了),因此,该SO链接已经回答了之前的问题。
似乎普遍的观点是“历史事故”或“因为月份不是数字,所以不能与日/年存储进行比较”,具体取决于您问的是谁。
*对不起,对不起,物理!=有事再来咬我。现在去熨烫我的手。
- 3 回答
- 0 关注
- 809 浏览
添加回答
举报