产业气象站|而不是从1开始?,漫话:如何给女朋友解释为什么计算机从0开始计数
【产业气象站|而不是从1开始?,漫话:如何给女朋友解释为什么计算机从0开始计数】
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
当我们想要写一个循环体 , 期望执行10次的时候 , 我们会使用以下方式:
for(inti=0i<10i++){
}
可以看到 , 为了保证循环10次 , 我们定义了一个整数变量从0开始 。
还有 , 当我们定义数组的时候 , 在常见的C语言、Java、Python等语言中 , 都是使用下标0来表示第一个元素的 。
文章图片
文章图片
文章图片
文章图片
从0开始更优雅
在一文中我们分析过 , Dijkstra通过分析 , 得出在进行范围表达的时候 , 使用左闭右开的方式更加合理 。
但是 , Dijkstra在分析出2≤i<13这种形式更加合理之后 , 他有陷入了另外一个思考 , 那就是:
当处理长度为N的序列时 , 到底第一个元素的下标使用0还是1更加合适?
关于这个分析 , 他的出发点很简单 , 那就是哪种方式更加漂亮 , 更加优雅 。
他认为 , 使用左闭右开的表达方式 , 当下标从1开始时 , 下标范围为1<=i<N+1;当下标从0开始时则是0<=i<N;
而显然后面这种表达式更加漂亮、优雅一些 。 所以 , 他建议我们使用0作为第一个下标 。
文章图片
文章图片
文章图片
文章图片
计数表示偏移量
很多人学习编程都是从C语言开始的 , 那么 , C语言就是一个典型的0-base语言(以0作为计数的开始) , 其实 , 这一约定早在BCPL时代就是这样的了 。
在C语言还不叫C语言 , 还叫BCPL的时候 , 他的作者马丁·理察德就设计了数组从0开始的索引方式 。
当我们在BCPL(C语言)中定义数组intarr[8]的时候 , 编辑器会在内存中开辟一块空间(这个空间中可能包含多个内存单元)供该数组使用 。
为了能让数组找到编译器为自己开辟的空间 , 会把这块内存空间中第一个内存单元的地址(0X0000001)赋值给这个数组 , 当我们使用&arr的时候 , 就可以拿到这块地址 。
文章图片
BCPL最初是用IBM7094机器编译的;它在编译时会优化这些数组索引提供的指针反参考运算(indirection) , 即可以通过指针取出地址中存储的值 , 这个特性也一直延续到今天 。
推荐阅读
- 产业气象站|5G基站太耗电!三大运营商正式官宣:将智能化关闭5G基站节约电费
- 产业气象站|他从不打无准备之仗,华为联手哈工大究竟想干啥?依任总性格
- 产业气象站|G是否影响健康?,张朝阳用手机保持30厘米
- 爱集微APP|“芯”势力助推游戏产业发展,芯片成为ChinaJoy的关键词之一
- 产业气象站|电力机器人“小白”上岗巡检
- 产业气象站|苏宁智能宣布五项Biu+共享政策,从生态赋能到生态共享
- 产业气象站|点赞“中国芯里的南大智慧”!华为公司CEO任正非一行访问南京大学
- 产业气象站|花多少钱收购,微软正在谈判收购TikTok美国业务
- 产业气象站|包括王兴,马云创办支付宝的本质不是为了支付,很多人没理解
- 上观新闻|半导体产业如何发展?嘉定举办的这个论坛指明了方向