码迷,mamicode.com
首页 > 编程语言 > 详细

为什么有些编程语言的数组要从零开始算

时间:2014-07-18 20:23:43      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:http   使用   art   io   问题   re   

这个问题,Dijkstra大神在1982年就写过论文了,题为 Why numbering should start at zero

总共也就3页手写,我就摘重点的大致翻译一下:

为了表示一个自然数序列2, 3, …, 12,排除掉中间的那三个点(...),总共有四种方式可供我们选择:

a) 2 <= i < 13
b) 1 < i <= 12
c) 2 <= i <= 12
d) 1 < i < 13

有没有什么原因使得我们应该选其中的某一种而不是其他的呢?是的,的确有。观察到 a) 和 b) 的优势是不等式的上下界之差恰好是序列的长度。基于此,作为一个中间结论:在 a) 和 b) 两种表达中中,两个序列是邻接的就意味着一个的上界等于另外一个的下界。但这些考量并没有让我们从 a) 和 b) 之中做出选择,所以我们从头开始。

存在一个最小的自然数。排除掉下界——就像 b) 和 d) 中那样——就会使得一个从最小的自然数开始的序列的下界变成非自然数。这样的表达方式很难看,所以对于下界应该更倾向于<=,就像 a) 和 c) 那样。现在,考虑一下从最小的自然数开始的序列:假如包含上界,当序列缩小成空序列时,就会使得 c) 不那么像自然数集。这样的表达方式也很难看,所以对于上界应该更倾向于<,就像 a) 和 d) 那样。综上所述, 我们应该倾向于使用 a) 的表达方式。

当处理长度为N的序列时,我们期望通过下标来区分它的元素。下一个恼人的问题就是,我们该给它的第一个元素赋予什么下标值?使用 a) 的表达方式,当下标从1开始时,下标范围为 1 <= i < N+1;当下标从0开始时则是 0 <= i < N,更好看。所以,让我们将序号从0开始:一个元素的序号(下标)等于序列中在它前面的元素个数。这个故事的寓意是我们更应该——过了这么多个世纪!——把0当作一个自然数。

来自知乎:为什么有些编程语言的数组要从零开始算?

为什么有些编程语言的数组要从零开始算,布布扣,bubuko.com

为什么有些编程语言的数组要从零开始算

标签:http   使用   art   io   问题   re   

原文地址:http://www.cnblogs.com/hellowangyang/p/3850341.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!