计算机里二进制补码为什么加1?
计算机中为什么要使用补码呢?
主要原因:1、使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 2、补码与原码的转换过程几乎是相同的。
(1)正数的补码
与原码相同。
【例1】+9的补码是00001001。(备注:这个+9的补码说的是用8位的2进制来表示补码的,补码表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等。)
(2)负数的补码
符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。
同一个数字在不同的补码表示形式里头,是不同的。比方说-15的补码,在8位2进制里头是11110001,然而在16位2进制补码表示的情况下,就成了1111111111110001。在这篇补码概述里头涉及的补码转换默认了把一个数转换成8位2进制的补码形式,每一种补码表示形式都只能表示有限的数字。
【例2】求-7的补码。
因为给定数是负数,则符号位为“1”。
后七位:+7的原码(0000111)→按位取反(1111000)→加1(1111001)
所以-7的补码是11111001。
已知一个数的补码,求原码的操作分两种情况:
(1)如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
(2)如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
另一种方法求负数的补码如下:
例如:求-15的补码
第一步:+15:00001111
第二步:逐位取反(1变成0,0变成1),然后在末尾加1。
11110001
再举一个例子验证下:求-64的补码
+64:01000000
11000000
【例3】已知一个补码为11111001,则原码是10000111(-7)。
因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;
再加1,所以是10000111。
计算机中为什么要使用补码呢?
主要原因:1、使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理。另外,两个用补 码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。 2、补码与原码的转换过程几乎是相同的。
(1)正数的补码
与原码相同。 【例1】+9的补码是00001001。(备注:这个+9的补码说的是用8位的2进制来表示补码的,补码表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等。)
(2)负数的补码
符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。 同一个数字在不同的补码表示形式里头,是不同的。比方说-15的补码,在8位2进制里头是11110001,然而在16位2进制补码表示的情况下,就成了1111111111110001。在这篇补码概述里头涉及的补码转换默认了把一个数转换成8位2进制的补码形式,每一种补码表示形式都只能表示有限的数字。 【例2】求-7的补码。
因为给定数是负数,则符号位为“1”。
后七位:+7的原码(0000111)→按位取反(1111000)→加1(1111001)
所以-7的补码是11111001。
已知一个数的补码,求原码的操作分两种情况:
(1)如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
(2)如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
另一种方法求负数的补码如下:
例如:求-15的补码
第一步:+15:00001111
第二步:逐位取反(1变成0,0变成1),然后在末尾加1。
11110001
再举一个例子验证下:求-64的补码
+64:01000000
11000000
【例3】已知一个补码为11111001,则原码是10000111(-7)。
因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;
再加1,所以是10000111。
主要原因:1、使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法来处理
这两句话什么意思,还是不太白,是怎么统一处理的,又是怎么把加法变成减法的,能形象解释下吗?
先看看补码的由来吧。
用十进制来说明,就比较好理解。
限定,使用 2 位 10 进制数:
24 - 1 = 23
24 + 99 = (一百) 23
进位一百,超出 2 位数,忽略。
此时,+99 和-1 就是等效的。
+99,就称为-1 的补数。
如果,可以使用 3 位数呢?
那么,-1 的补数,就是 +999。
负数的补数=负数 + 10^n, n 是位数。
-----------------------
计算机用二进制,补数,就改称为:补码。
使用补码,就可以把减法,转换成加法运算,从而简化硬件。
8 位 2 进制的范围是:0000 0000 ~ 1111 1111 (十进制 255)。
-1 的补码,就是:-1 + 2^8 = 255 = 1111 1111(二进制)。
-2 的补码,就是:-2 + 256 = 254 = 1111 1110。
。。。
-128 的补码,是:-128 + 256 = 128 = 1000 0000。
负数的补码,就是这么来的。
补码,与原码反码毫无关系。
-----------------------
为什么是“取反、加一”?
下面用四位二进制来说明。
如果 X =-xxxx。
前面的负号(-)说明 X 是负数。后面的 x,是 1 或 0。
那么,[X]补 = -xxxx + 2^4
= -xxxx + 1 0000。
式中的 1 0000,可以写成: 1 + 1111。
那么,[X]补 = 1111-xxxx + 1。
式中的 1111-xxxx:
如果 x 是 0,1-x 就是 1。
如果 x 是 1,1-x 就是 0。
所以,这就是对 xxxx 取反。
式中的 + 1:
就是在取反之后,再加上 1。
经过“取反、加一”就得到 X 的补码了。
注意:
取反时,只是对 X 的绝对值 xxxx 取反。
此时,既没有说到“原码”,也没有说“反码”。
更没有说“符号位不变”。
所以,补码与“原码、反码和符号位”都没有关系。
对于带符号数,才会有采用什么码型来表示的问题
广告 您可能关注的内容 |