从零开始

约定不等于承诺〃 2021-11-27 01:58 586阅读 0赞

我们都知道,计算机科学中的索引一般都从0开始,比如数组等。之所以这样,是有着深刻的原因的:

首先,举个直观的栗子,计算机中要求的是二进制,假如有四个苹果:

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

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

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

其次,从零开始的习惯来源于机器语言,之前要计算一个数组元素的地址需要将数组的起始地址加上该元素的索引。

如果下标从0开始,寻址公式就是:a[i]_address = base_address + i*data_type_size

如果下标从1开始,那寻址公式就为:a[i]_address = base_address + (i-1)*data_type_size

所以,将起始索引设为1要么会浪费数组的第一个元素的空间,要么会花费额外的时间来将索引减1。

最后,对于计算机的CPU来说,假如索引从1开始,那么每一次的随机访问,就会多了一次运算,多发一条指令,显然从0开始才是更加省时省力的。

发表评论

表情:
评论列表 (有 0 条评论,586人围观)

还没有评论,来说两句吧...

相关阅读

    相关 开始设计CPU

    CPU,中文全称为中央处理单元,简称处理器,是现代电子计算机的核心器件。如果你想了解一台计算机是如何构建并工作的,那么深入了解CPU的设计非常有用。不过,这个美好的愿望是否会遭

    相关 一切开始

    背景 昨天匆匆从前公司办完离职,都没来得及和昔日的小伙伴一一道别,因为是不太敢,前公司最近人员动荡,为了不影响军心,我只和几个坐在旁边的同事打打招呼就匆忙离开,今

    相关 开始学抓取

    从零开始学抓取   昨天突然遇到了一个需要统计某个网站所有页面单词数的任务,于是从零开始学起python搞抓取。   看了一下资料,需要用到下面几个库: bea

    相关 开始学netty

    Netty概述: 1、netty是基于Java NIO的网络应用框架,client-server框架 2、Netty是一个高性能、异步事件驱动的NIO框架,它提供了对T

    相关 开始

    我们都知道,计算机科学中的索引一般都从0开始,比如数组等。之所以这样,是有着深刻的原因的:   首先,举个直观的栗子,计算机中要求的是二进制,假如有四个苹果: 索引从1开