计算机系统的二进制运算(原码反码补码)

目录

 

什么是二进制

计算机系统中的二进制

原码

反码

补码

为什么负数的补码的求法是反码+1


 

什么是二进制

X进制指的就是以多少为基数和进制的数学表达方式算法。二进制数据是用0和1来表示的数,进位规则“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。比如:

0[0000],1[0001],2[0010],3[0011],4[0100]...

 

计算机系统中的二进制

在计算机系统中,是约定采用带符号的二进制,最高位的一位代表正负符号位。首先有以下几个概念,本文都以一字节8位的二进制为例:

原码

原码很好理解,最高位0代表正数,1代表负数,例如:1 的原码 = 00000001    -1的原码 = 10000001 。在原码参与计算时,正数之间的加法结果是不会有问题,而正数与负数相加,或负数与负数相加,就会有莫名其妙的结果,这都是符号位引起的。要解决这个问题,在运算时首先要考虑符号位,这就非常不便。

反码

由于计算机系统只存在加法,而1 - 1 === 1 +(-1)按原码进行计算会被表达为:

00000001 + 10000001,最终的运算结果为-2,显然不对。为了解决这个问题,反码出现了。

约定:正数的反码和原码一样,负数的反码是对原码除符号位外进行取反。

例如 :1 的反码 =00000001  -1 的反码 = 11111110

补码

按反码进行计算,1 - 1 === 1 +(-1)会被表达为00000001+11111110=11111111取反=10000000=-0,在反码中会存在对+0和-0的两种表达,这个时候补码出现。

约定:补码是在反码的基础上再次进行转化,正数的原码 、 反码、补码都一样,负数的补码是在反码的基础上 +1 。

例如:-1的补码 = 反码11111110 + 1 = 11111111。

1 - 1 === 1 +(-1)按补码进行计算会被表达为:

00000001 + 11111111 = 00000000(最高位溢出被丢弃)

补码运算其实是一种数值有限制、有溢出的模运算,也就是说在这种运算规则下,减去一个数其实相当于加上这个数的同余数。这就好比12进制的时钟,11-1=10点,11+11=22在时间表达上也是10点。

为什么负数的补码的求法是反码+1

负数的补码等于反码+1并不是补码的定义,只是负数补码正好就等于反码+1而已。求补码并不一定要先求反码,如果有兴趣了解补码的详细原理,建议阅读《计算机组成原理》,里面以“模”和“同余”的概念解释补码。

负数的反码加上这个负数的绝对值(符号为正)正好等于11111111,在加1就是100000000,也就是8位二进数的模,而负数的补码是它的绝对值的同余数,可以通过模减去负数的绝对值得到它的补码,所以负数的补码就是它的反码+1。

 

因此基于以上,由于补码表示中的符号位可以与数值位一起参加运算,并且可以将减法转换为加法进行运算,简化了运算过程,计算机中的二进制都以补码的形式参与运算和存储。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值