神奇的二进制(一)

我们现在用的数字是阿拉伯数字,0,1,2,3,4,5,6,7,8,9,阿拉伯数字其实是印度人发明的,只是经过阿拉伯人传入欧洲,欧洲人并不知道这些数字的真正发明人是印度人,把功劳给了阿拉伯人,所以欧洲人叫它阿拉伯数字。阿拉伯数字是十进制的,就是逢十进一位,9 在加1的时候就变成了2位数10。

 

为什么是十进制,不是八进制,十二进制呢?因为古代人是掰手指计数的,人类刚好有十个手指,所以就用十进制,如果人类有十二个手指,那么我们肯定就用十二进制了。

 

几乎所有的文明都采用了十进制,那么有没有文明采用二十进制呢?也就是把手指和脚趾都算上,都数完了,到了二十才进一位,还真有,就是雅玛文明。相比十进制,二十进制有很多不便之处。我们中国人过去即使不识字的人,也能背诵九九乘法表,但是换成二十进制,那要背的可就是19*19的围棋表了:

 

即使是现代人也背不下,何况那时候的雅玛人,这也许也是雅玛文明发展缓慢的原因之一。

 

那计算机为什么不用十进制,而采用二进制呢?原因很简单,因为计算机不是人。。。计算机内部是由IC(集成电路)组成的,集成电路两侧有很多个引脚,每个引脚只有直流电压0V或5V两个状态,也就是说IC的一个引脚,只能表示0,1两种状态。

 

所以说,不是计算机想用二进制表示,而是计算机没办法,只能用二进制表示。那么二进制是不是没有十进制优秀呢?不能这么粗暴的比较,但是简单的东西往往更高级,我们现在用电脑看的网页,听得音乐,看的视频,玩的游戏,这背后的一切信息都是一串串0和1的组合变化而来,是不是很神奇?两个简单的0和1居然变化出了如此缤纷多彩的世界。

 

什么是二进制数呢?二进制就是一位最多表数两个数:0和1(十进制一位最多表示十个数:0~9),如果要表示数字2,一位就表示不下了,要进一位变成两位变成10,二进制的10就等于十进制的2。

 

要了解进制的概念,首先我们先从位权说起,例如十进制数101中第一位表示100的倍数,第二位表示10的倍数,第三位表示1的倍数,在某一位上的“1”所表示的数值的大小,称为该位的位权,代表每个位置的权重,这里第一位的位权是100,第二位的位权是10,第三位的位权是1。1*10^2 + 0*10^1 + 1*10^0 = 101 都是以10为底进行计算的,10称为基数。同理,二进制第一位的位权是1,第二位的位权是2,第三位的位权是4,基数是2。

 

二进制转十进制,就是二进制的基数2乘以位置对应幂次方,然后累加就等于十进制了,下面的例子详细的展示了转换的过程。

                                                       二进制整数转十进制整数

 

二进制小数如何转成十进制呢?我们再来看个例子:

 

                                                      二进制小数转十进制小数

 

二进制小数点后面的数是乘以2的负次幂,依次是-1,-2,-3等等。现在是不是对二进制有点了解了呢?

 

计算机在内存中是以字节为最小的信息计量单位,一个字节等于8位二进制数。用字节单位处理数据时,如果数字小于存储数据的字节数,那么高位就用0填补,例如10010这个5位的二进制数,用一个字节表示就是00010010,如果一个数超过了最大的范围,超出的部分就会被直接丢弃。

 

二进制如何表示负数呢?

二进制表示正负数时,一般会把最高位当做符号位,符号位0表示正数,1表示负数,那么-1用二进制怎么表示呢?1用二进制表示为00000001,所以推算一下-1应该就是10000001吧?让我们来验证一下,看看对不对,十进制 1 +(-1)= 0,二进制 00000001 + 10000001 = 10000010 很明显不等于0 啊。

 

我们知道二进制1是00000001,那么我们倒推一下,00000001加上什么数会等于00000000呢?想来想去都想不到啊,不知道你有没有发现,计算机是没有减法运算的,计算机的减法是通过加法实现的,那么加法怎么能达到减法的效果呢?我们看下这个例子:

 

1 00000000超出了一个字节的范围,最高位1被舍弃,剩下的就是 00000000,这就是十进制的0啊,推理可得-1用二进制表示就是11111111,好神奇,原来二进制的负数表示叫做补码,补码的转换规则是正数的取反加1,比如:00000001 取反就是 11111110,然后再加1就是11111111,这就是-1的二进制表示了。

 

仔细想想所谓补码,就是加起来等于11111111的码啊,然后再加1,最高位溢出后,不就等于0了吗,一个和原来的数加起来等于0的数不就是它的负数吗?这么想是不是就容易理解了呢。

 

总结一下:

1. 计算机信息最适合用二进制表示

2. 二进制数以2为基数,乘以对应的幂次方累加就能转换成十进制数

3. 负数在二进制中用补码表示

 

欢迎关注公众号,下一次我们来聊聊浮点数。

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值