Language agnostic 为什么有些语言从0索引而不是从1索引?效率

Language agnostic 为什么有些语言从0索引而不是从1索引?效率,language-agnostic,indexing,history,Language Agnostic,Indexing,History,所以在我公寓的电梯里,按钮并没有(在英国)标记为:G、1、2、3等等,也没有美国的风格:1、2、3、4等等 它们被标记为:0、1、2、3,即它们是从0开始的索引 我对自己说:“很明显,如果要编写一个类似Gotoflor的函数来表示楼层之间的移动,可以通过元素的索引来实现。轻松 然后我意识到并非所有语言的数组都是从0开始的,有些是从1开始的 这个决定是如何作出的?这是效率问题吗(我怀疑!)?对新程序员放松(可以说,犯过一次错误的人不会再犯了) 我看不出编程语言会偏离标准的任何原因,无论是0、1还是

所以在我公寓的电梯里,按钮并没有(在英国)标记为:G、1、2、3等等,也没有美国的风格:1、2、3、4等等

它们被标记为:0、1、2、3,即它们是从0开始的索引

我对自己说:“很明显,如果要编写一个类似Gotoflor的函数来表示楼层之间的移动,可以通过元素的索引来实现。轻松

然后我意识到并非所有语言的数组都是从0开始的,有些是从1开始的

这个决定是如何作出的?这是效率问题吗(我怀疑!)?对新程序员放松(可以说,犯过一次错误的人不会再犯了)

我看不出编程语言会偏离标准的任何原因,无论是0、1还是任何其他数字。考虑到这一点,也许了解第一种能够编制索引的语言,然后了解第一种能够打破既定惯例的语言会有所帮助

我希望这不是一个太“空洞”的问题,因此,我非常渴望听到索引背后的历史。

第一种“语言”应该是汇编语言。在这里,数组只是第一个元素的内存地址。要访问数组中的一个元素,需要添加偏移量。因此,如果数组位于位置
t0
,那么
t0+0
是第一个元素,
t0+1
是第二个元素等。这导致索引从0开始。后来,高级语言添加了更好的语法,但索引保持不变

但有时也有例外。例如,在Pascal中,字符串是字节数组。但是,数组/字符串的第一个字节存储字符串的长度,因此第一个字母存储在索引1中。但是,索引0仍然存在,可以用来获取所述长度。

第一种“语言”应该是汇编语言。在这里,数组只是第一个元素的内存地址。要访问数组中的一个元素,需要添加偏移量。因此,如果数组位于位置
t0
,那么
t0+0
是第一个元素,
t0+1
是第二个元素等。这导致索引从0开始。后来,高级语言添加了更好的语法,但索引保持不变


但有时也有例外。例如,在Pascal中,字符串是字节数组。但是,数组/字符串的第一个字节存储字符串的长度,因此第一个字母存储在索引1中。但是,索引0仍然存在,可以用来获取所述长度。

当第一种编程语言设计时,它通常从0开始,因为数组映射到内存位置。映射到内存位置的数组,该数字用作检索相邻值的偏移量。据此,数字应视为距起点的距离,而不是数组中的顺序

从数学的角度来看,这是有意义的,因为它有助于更自然地实现算法

然而,0对人类没有吸引力,因为我们从1开始计算。这是违反直觉的,这就是为什么一些语言决定“伪造”1的起始数组。(请注意,其中一些(如VB)允许您在基于0和1的数组之间进行选择。)

关于这个话题的有趣信息可以在这篇著名的Dijkstra文章中找到:


当设计第一种编程语言时,它通常从0开始,因为数组映射到内存位置。映射到内存位置的数组,该数字用作检索相邻值的偏移量。据此,数字应视为距起点的距离,而不是数组中的顺序

从数学的角度来看,这是有意义的,因为它有助于更自然地实现算法

然而,0对人类没有吸引力,因为我们从1开始计算。这是违反直觉的,这就是为什么一些语言决定“伪造”1的起始数组。(请注意,其中一些(如VB)允许您在基于0和1的数组之间进行选择。)

关于这个话题的有趣信息可以在这篇著名的Dijkstra文章中找到:


Dijkstra写了一篇文章,解释了为什么基于0的指数是自然的方法。我会看看我是否能快速谷歌一个链接。这可能更适合程序员。stackexchange。com@DonRoby我不这么认为,这是关于编程语言,而不是作为一个程序员。请查看,但如果我错了,请告诉我。@graviton等人,如果这是离题的话,那么它在主题上的位置是什么?如果是关于其他地方的话题,为什么不迁移呢?Dijkstra写了一篇关于为什么基于0的索引是自然方式的文章。我会看看我是否能快速谷歌一个链接。这可能更适合程序员。stackexchange。com@DonRoby我不这么认为,这是关于编程语言,而不是作为一个程序员。请查看,但如果我错了,请告诉我。@graviton等人,如果这是离题的话,那么它在主题上的位置是什么?如果是关于其他地方的话题,为什么不迁移呢?