源码补码
A. 原码怎么直接转变为补码
分两种情况,以八位原码转换为例:
正数(符号位为0的数)补码与原码相同。
负数(符号位为1的数)变为补码时符号位不变,其余各项取反,最后在末尾+1
例如:原码01100110,补码为:01100110
原码11100110,先变反码:10011001,再加1变为补码:10011010
B. 原码+补码=; 补码补的是什么
补码=原码取反+1;
原码+补码=原码+原码取反+1;
原码+原码取反=任意位为1(取决于位数);
再加上1后,则低位归零,高位进1或溢出;
C. 原码与补码的转换
1、首先要知道,换算规则:原码转换为反码:符号位不变,数值位分别“按位取反” 。
D. 原码 补码
1.
补码加法的公式是
[x]补+[y]补=[x+y]补
(mod 2) (2.17)
现分四种情况来证明。假设采用定点小数表示,因此证明的先决条件是
|x|<1, |y|<1, |x+y|<1。
(1)x>0,y>0,则x+y>0。
相加两数都是正数,故其和也一定是正数。正数的补码和原码是一样的,可得:
[x]补+[y]补=x+y=[x+y]补 (mod 2)
(2)x>0,y<0,则x+y>0或x+y<0。
相加的两数一个为正,一个为负,因此相加结果有正、负两种可能。根据补码定义,
∵ [x]补=x, [y]补=2+y
∴ [x]补+[y]补=x+2+y=2+(x+y)
当x+y>0时,2 + (x+y) > 2,进位2必丢失,又因(x+y)>0,
故 [x]补+[y]补=x+y=[x+y]补 (mod 2)
当x+y<0时,2 + (x+y) < 2,又因(x+y)<0,
故 [x]补+[y]补=2+(x+y)=[x+y]补 (mod 2)
(3)x<0,y>0,则x+y>0或 x+y<0。
这种情况和第2种情况一样,把x和y的位置对调即得证。
(4)x<0,y<0,则x+y<0。
相加两数都是负数,则其和也一定是负数。
∵ [x]补=2+x, [y]补=2+y
∴ [x]补+[y]补=2+x+2+y=2+(2+x+y)
上式右边分为”2”和(2+x+y)两部分.既然(x+y)是负数,而其绝对值又小于1,那
么(2+x+y)就一定是小于2而大于1的数,进位”2”必丢失.又因(x+y)<0, 所以
[x]补+[y]补=2+(x+y)=[x+y]补 (mod 2)
2.
你说的是对的,两种方法是一样的,都对,我就不证明了
E. 原码补码怎么转化
分两种情况:正数和负数.
如果机器数是正数,则该机器数的补码与原码一样;
如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。
希望可以帮到你.
F. 原码和补码是什么意思
原码,没有任何意义。
补码具有:用正数代替负数,把减法变成加法运算的功能。
这样,计算机中,只需用一个加法器,便可进行加减运算了。
所以,在计算机中,只是使用补码。根本就不用原码和反码。
对于钟表,倒拨 4 小时,可用正拨 8 小时代替。
对于十进制数,减一,可以用 +99 代替。
比如:24-1 = 23
24 + 99 = (1) 23
忽略进位,只取低两位,结果就是相同的。
这里用来代替负数的正数,就叫做“补数”。
计算机用二进制,就叫做“补码”。
正数,直接运算即可,不用求补码。
负数的补码是:模+该负数。
八位二进制的模是:2 的 8 次方=256。
-1 的补码,就是:256-1 =255 = 1111 1111(二进制)。
-2 的补码,就是:256-2 =254 = 1111 1110(二进制)。
。。。。。。
-128 的补码,就是:256-128 =128 = 1000 0000(二进制)。
求补码,用公式就可得出,并不需要绕道原码反码符号位。
G. 知道 补码,如何 计算 原码
两种计算方法:
算法1: 补码=原码取反再加1的逆运算
10010110是补码,应先减去1变为反码,得10010101;
由反码取得源码即除符号位外其他为按位取反,得11101010,即十进制数的-106
算法2:负数补码速算法,由最低位(右)向高位(左)查找到第一个1与符号位之间的所有数字按位取反的逆运算
10010110是补码,符号位与最后一个1之间的所有数字按位取反,得11101010
两种算法得出同样结果
H. 补码10000000原码是多少
无法用原码表示,按照原码定义,8位原码所表示真值的范围为:-127(11111111B)~+127(01111111B)。补码10000000B的真值为-128,超出了8位原码的表示范围,所以无法用8位原码表示。
数0的补码表示是唯一的。
[+0]补=[+0]反=[+0]原=00000000;
[-0]补=11111111+1=00000000。
(8)源码补码扩展阅读:
已知一个数的补码,求原码的操作其实就是对该补码再求补码:
1、如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
2、如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
例:已知一个补码为11111001,则原码是10000111。
因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;再加1,所以是10000111。
网络-补码
I. 原码,补码
1:我们来看一下补码的求得过程:将原码的各位取反,再加1,得到补码。举个例子,1001,它全部取反之后就是0110,再加1得到0111。将原码与补码加相,会得到10000。我们应该知道,计算机最基础的运算器只能做加法,所以叫累加器,它做不了减法。所以当需要减法的时候我们取减数的补码,用被减数去加这个补码。如果是1111-1001=0110的话就相当于1111-(10000-0111)=1111
0111=0110,其中0111是1001的补码。由于码不像数字,码是有位数的限制的,当有多于其位数的操作时是不表现出来的,所以减去一个数的原码就相当于加上它的补码。相信,看明白了这一条,第三个问题也就解决了。
2.规定……惯例的,当初就这么说的,反正二进制就两个数,不是0就是1,取反就是对方。1比0大,正数比负数大……我是这样想的,这一点我不敢肯定。
4.不记符号位的话,原码
补码=100...0(0的位数与原码的位置一致),那你说这两个码是不是互为原补码?取补码之后再取一次补码就是自身了。
J. 怎么求补码的原码
已知一个数的补码,求原码的操作其实就是对该补码再求补码:
1、如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
2、如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
例如:已知一个补码为11111001,则原码是10000111(-7)。因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;再加1,所以是10000111。
(10)源码补码扩展阅读:
数的表示:
在数的表示上通过人为的定义来消除编码映射的不唯一性,对转换后的10000000强制认定为-128。当然对原码和反码也可以做这种强制认定,那为什么原码和反码没有流行起来?原码和反码没有流行起来,是因为在数的运算上对符号位的处理无法用当时已有的机器物理设计来实现。
由于原码和反码在编码时采用了硬性的人工设计,这种设计在数理上无法自动的通过模来实现对符号位的自动处理,符号位必须人工处理,必须对机器加入新的物理部件来专门处理符号位,这加大了机器设计难度,加大的机器成本,不到万不得已,不走这条路。
参考资料:
网络--补码