为什么计算机从零开始计数?

今天的问答环节是由SuperUser提供的,SuperUser是Stack Exchange的一个分支,是一个由社区驱动的问答网站分组。...

为什么计算机从零开始计数? Counting from zero is a very common practice in many computer languages, but why? Read on as we explore the phenomenon and why it is so widespread.

今天的问答环节是由SuperUser提供的,SuperUser是Stack Exchange的一个分支,是一个由社区驱动的问答网站分组。

问题

超级用户读者DragonLord很好奇为什么大多数操作系统和编程语言都是从零开始计算的。他写道:

Computers traditionally tally numerical values starting from zero. For example, arrays in C-based programming languages start from index zero.

What historical reas*** exist for this, and what practical advantages does counting from zero have over counting from one?

为什么呢?尽管这种做法很普遍,但实施这种做法肯定有实际原因。

答案

超级用户贡献者Matteo提供了以下见解:

Counting arrays from 0 simplifies the computation of the memory address of each element.

If an array is stored at a given position in memory (it’s called the address) the position of each element can be computed as

element(n) = address + n * size_of_the_element

If you c***ider the first element the first, the computation becomes

element(n) = address + (n-1) * size_of_the_element

Not a huge difference but it adds an unnecessary subtraction for each access.

Edited to add:

  • The usage of the array index as an offset is not a requirement but just an habit. The offset of the first element could be hidden by the system and taken into c***ideration when allocating and referencing element.
  • Dijkstra published a paper “Why numbering should start at zero” (pdf) where he explains why starting with 0 is a better choice. Starting at zero allows a better representation of ranges.

如果你想更深入地探究答案,Dijkstra的论文是一本信息丰富的读物。


有什么要补充的解释吗?在评论中发出声音。想从其他精通技术的Stack Exchange用户那里了解更多答案吗?在这里查看完整的讨论主题。

  • 发表于 2021-04-11 22:00
  • 阅读 ( 159 )
  • 分类:互联网

你可能感兴趣的文章

从零开始学习道德黑客与这个免费电子书(价值23美元)

... 使用服务器端和客户端攻击入侵和控制远程计算机。 远程控制一个被黑客攻击的系统,并利用它攻击其他系统。 发现、利用和防止许多web应用程序漏洞,如XSS和SQL注入。 ...

  • 发布于 2021-03-20 04:52
  • 阅读 ( 311 )

如何用java编写for循环

... 记住,数组位置从零开始,而不是从一开始,所以我们希望循环从零开始。我们的第一个循环将打印Hello,第二个循环将打印空格,依此类推。在第四个循环之后,我们的计数器将增加到4...

  • 发布于 2021-03-29 11:52
  • 阅读 ( 231 )

如何从零开始擦除mac并重新安装macos

...除它。 开始之前,请确保将要保留的任何文件传输到新计算机或外部驱动器。即使您不打算擦除驱动器,也最好在重新安装操作系统之前进行备份。 第一步:从恢复模式或安装程序启动 相关:恢复模式下可访问的8个Mac系统功...

  • 发布于 2021-04-08 02:49
  • 阅读 ( 146 )

英国广播公司如何从零开始建立一个领先的在线新闻来源

英国广播公司多年来一直是英国娱乐业的支柱,但现在它也以领先的在线新闻来源而闻名于世。从最初的头脑风暴到从头开始创建内容管理系统,《注册报》深入了解了BBC新闻是如何创建的。不出所料,在一个像BBC这样的庞大组...

  • 发布于 2021-04-24 17:08
  • 阅读 ( 101 )

在不到一年的时间里从零开始成为一名深入学习的编码员

...它是图像和语音识别、推荐系统和各种任务背后的技术,计算机过去非常不擅长,但现在非常擅长。它包括教计算机自学。据数据科学家巴加瓦说,你可以在不到一年的时间里学会。你需要每周投入10-20个小时,但你会学到很多...

  • 发布于 2021-05-15 07:05
  • 阅读 ( 124 )

最好的巧克力,从零开始制作出令人惊叹的热巧克力

热巧克力总是美味的,但是为了得到最好的一杯,你应该用粉末巧克力还是固体巧克力?你的巧克力里可可的含量是多少?一个巧克力专家揭示了一切。Leslie Stephens在Food52上与糕点大师兼巧克力专家Jacques Torres进行了交谈,他建...

  • 发布于 2021-05-17 23:13
  • 阅读 ( 92 )

绝对的(absolute)和增量编码器(incremental encoders)的区别

...是电子厂机械控制中的一项关键功能。这些机器中的微型计算机经常需要有关轴或轴的位置、旋转方向和旋转速度的信息,这些信息需要转换成数字形式。光学编码器是用于测量角度或线性位置的机电设备。用于角度检测的通常...

  • 发布于 2021-06-26 05:44
  • 阅读 ( 339 )

从零开始清理和重新整理你的桌子

...找到任何你需要的东西。weblogclunclutter向我们展示了如何从零开始找出你真正需要的东西。Unclutter推荐了一种与流行的衣架清洁方法类似的方法。把你实际使用的东西划掉,剩下的移到别的地方:Take all of the supplies out of the drawer ...

  • 发布于 2021-07-25 01:57
  • 阅读 ( 171 )

从零开始酿造烈性苹果酒

这是一年中一个完美的时间来尝试你的手把一些苹果酒变成硬苹果酒,苹果酒的乌合之众唤醒哥哥。只需少量的原料和一壶苹果酒,你就可以在家里自己酿制。带上一两罐苹果酒和一些很容易买到的自制设备,比如蒸汽锁和一包...

  • 发布于 2021-07-28 08:15
  • 阅读 ( 119 )

使用delphi性能计数器精确测量运行时间

...动以来经过的毫秒数,但该函数的精度仅为1毫秒,如果计算机长时间处于通电状态,则该函数可能并不总是准确的。 经过的时间存储为DWORD(32位)值。因此,如果Windows连续运行49.7天,时间将变为零。 GetTickCount也仅限于系...

  • 发布于 2021-09-15 03:49
  • 阅读 ( 184 )
iv7875332
iv7875332

0 篇文章

相关推荐