二进制的理解

学了很长时间的二进制数,一直觉的比较纠结,因为不知道他为什么会这样.

1.       为什么选择二进制?

2.       为什么会有补码和反码

3.       为什么求补码过程中是取反后再加一个1呢,这个1有什么用?

4.       机器是如何实现无障碍运算的?

5.       是不是没有什么道理,只是为了实现人机交换的一种方式而已?

 

二进制的起源:

德国天才大师莱布尼茨Gottfried Wilhelm Leibniz1646 - 1716)发明了二进制,并称之为神奇美妙的数字系统。

 

选择二进制的很大一部分原因,个人觉得和模拟数字电路即硬件实现计算有很大关系,因为10刚好表示低电平和高电平这两个状态,同时也符合逻辑运算的要求(1为真,0为假)。

                                                                                                                                          

十六进制紧跟二进制之后得到广泛应用,将四位二进制数转为十六进制的一位数,使书写和记忆都变得异常简单(注意,十六进制就是为此而存在的,因为00001111刚好就是16进制

计算机中采用补码表示数,实现了对加减法相同的操作,这种操作到底是如何实现的呢

首先:我们一开始准备使用源码,但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如:

(00000001) + (10000001) = (10000010) = ( -2 ) 显然不正确.

因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.

1+-2=-1

(00000001) + (11111101) = (11111110) = ( -1 ) 正确

1+-1=0

(00000001) + (11111110) = (11111111) = ( -0 ) 有问题.

现在问题出现在(+0)(-0),在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大).

为了解决这个问题我们引入了补码这个概念,即对于负数在其反码的基础之上再加1形成补码,以消除(-0),且看下表

八位二进制数对应表

 

实质上这里关系到两个数1000 00001111 11111,在把这两个数当做源码时表示的是(-0)和-127,当做反码时是-127-0,当做补码时是-128-1,这里就没有再出现(-0)这个数字了,而表示的范围也由-127~-0 +0~127变为-128~0~127

注意-128实际上是认为设定的,因为要消掉-0,  1111 1111 做补码时,其源码应为1000 0001-1,而此时1000 0000做补码它的源码和反码是不存在的,所以认为设定它为-128

不知道这样讲对不对,如果有不同的意见,欢迎多多交流!!

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值