为什么很多编程语言要把0设置为第一个元素下标索引,而不是直观的1?

由网友 皮蛋XXXXL 提供的答案:

这个和二进制有关系。也和算数逻辑有关系。

一个位能存储2个状态。 0和1。 所以,0是"有信息"的,而不是大家在算数里面认为的"没有"。

也就是说,存储0是需要成本的,也是信息。

而下标索引从0开始就很好理解了。 0不是没有,而是在电路中的一个存储位。如果从1开始,就浪费了一位,这是完全没必要的。

由网友 哥本哈根诠释2023 提供的答案:

因为0在编程中是一个特别的数,在以前追求效率的年代,能跟0靠边就可以节省一条指令。比如跳转指令跟0比较是可以一条指令实现,而跟1比较得先减1再判断是否为零然后再跳转。那么,下标为0,能提升极限情况下的性能,所以一开始就这么定了

由网友 淡泊的清风Wx 提供的答案:

计算机的基础是二进制。拿有符号8位整数来说,最小的二进制整数是00000000,-1是11111111。没有道理舍弃0不用。你有这种疑惑是因为你是从自然数的角度考虑的,但是实际上从十进制数字的角度来看,也是从0开始的。0123456789,然后进位,就是10了。

由网友 JijiDa 提供的答案:

有啊,basic就是从1开始的,0是c语言引入,c语言本身是一种贴近底层的高级语言,用0是因为实际上下标就是内存指针。后来的编程语言大多受c影响巨大,因此很多都约定俗成用0做下标。如果设计者愿意java python go JavaScript 等等语言都可以用1作为数组下标起始。

由网友 BWanger软件开发达人 提供的答案:

做为一个三十多年用C,C++编程的人,第一次碰见有人问这问题。

的确是这样,不论是数组、字符串,还是指针,无一例外要从0开始访问。

char ch_array[4096];

for(int i=0;i<4096;i++)

ch_array[i]=30;

如果写成for(i=1;i<=4096;i++)ch_array[i]=30;

不仅错误,而且难看。

我想之所以从0开始,有几方面原因:

1,零是一个里程碑。

在高等数学中,老师会强调0的意义。如数列,必须给第0项f(X0)的值,有了f(X0)的基础,其它才顺理成章。

2,在编程中,约定俗成,从0开始。

软件开发人员互相交流,都是以0为基础。如要查第6名的成绩,自然是打印score[5]的值,而不是score[6]。否则交流会很累。

当然,显示输出时,肯定会显示"第6名成绩"是多少:

printf("第%d名成绩是%d分",num+1,score[num]);

3,我觉得,从0开始,与西方人的习惯有关。

西方人住别墅的多,别墅的地面那一层,为车库,所以叫GROUND层,而习惯上把第二层才叫1st floor。

我们国家直接把地面这层就叫第一层。

西方人习惯上的这种认知,自然带到了编程上。谁让早先的编程软件都是人家发明的呢!

for(int i=0;i<4;i++)

printf("电梯到第%d层了!",i);

一目了然。

以上是我的一点看法。编程软件已经有半个世纪的历程了,确切的答案,只能等西方国家的一些保密文件解密后才会有最正确的答案。但有一点,这些先贤们的想法真的很一致,那就是,万事从0开始,有0才会有1,才会有无穷。

由网友 虚实难证主客唯心 提供的答案:

无论从硬件还是日常习惯上讲,清计数器后应该是0还是1?

为什么你觉得从1更直观?

做完一件事后计1,很正常啊,为什么没有做一件事就开始计1!

球场比赛,进球前显示器0,进一个才是1,默认双方0:0,难道开场显示1:1?

部分文章源于互联网收集,不代表默子网络立场,版权归原作者所有,如若转载,请注明出处:https://www.html369.cn/33695.html