关于计算机中为什么要从0开始计数?

一 从快速寻址的角度(数组):

下标从0开始主要的意义是表示偏移,下面举例:

数组为什么起始下标是0?其实数组是一种线性结构,它有一段连续的内存空间,存储一组具有相同类型的数据。

如图,拿一个长度为10的int类型数组举例,系统就会为该数据分配一段连续的内存空间,空间大小为40个字节,其中内存块首地址base_address = 100。
  在这里插入图片描述
数组是可以随机访问的,当访问第i个元素时,需要定位第i个元素的地址,定位公式如下:

第i个元素地址=base_address + i * data_type_size

其中data_type_size表示数组中元素类型的大小,int类型大小是4字节,所以公式里data_type_size等于4。在这里,下标可以理解为偏移,数组的首地址就是base_address,其中a[0]就是偏移为0的位置,a[i]就是偏移了i个data_type_size大小的位置,所以计算a[i]地址的公式为:

a[i]地址=base_address + i * data_type_size

这里如果数组下标从1开始,那么a[i]地址的公式为:

a[i]地址=base_address + (i - 1) * data_type_size

两个公式显而易见,下标从0开始的更加简单,后者从1开始,每次访问数组元素都需要额外做一次减法操作,效率更低。

二 从内存损耗的角度:

通过例子来说明这个问题,假如要存100个人在数组中,如果用最小索引为1,则最大索引为100,如果最小索引为0,则最大索引为99,99为两位数,而100为三位数,这就体现出从0开始的优点。

计算机中要求的是二进制,假如有四个汽车:

索引从1开始的十进制为:(1,2,3,4),对应的二进制为(1,10,11,100);

索引从0开始的十进制为:(0,1,2,3),对应的二进制为(0,1,10,11);

可以看到,索引从0开始时,最大宽度为两位,而从1开始最大宽度为三位,当然是两位更具有优势。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值