感悟网 导航

补码运算的问题

作者&投稿:庾菁 (若有异议请与网页底部的电邮联系)
补码的计算问题~

你确实错了:
-60=11000100
53=00110101

11000100+00110101=11111001


正数的补码 与原码相同。
负数的补码 符号位为1,其余位为该数绝对值的原码按位取反;然后整个数加1。


所以:-60的 最高位 为1,其余七位 为60的源码0111100取反后1000011加1为1000100 总起来就是11000100

其结果11111001,其中最高位为1,说明为负数,
其余七位1111001减1为1111000,然后取反为0000111,转换为十进制为7
总起来就是-7

最高位只是一个符号位,1就是负数,0就是正数,参与计算,但是不参与取值

关于补码问题 还有考虑宽度,例如 是按照字节来计算就是8个位,c语言中的char类型就是这种,最大取值为127到-128 ,
如果是 无符号类型,unsigned char ,那么最高位 不在代表符号,而参与取值 即0到255,没有负数。
当然c语言中的int 是32位的,原理同上。
你只所以错了,是因为混淆了 反码

例如

原码:
7的原码是0 0000111
-7的原码是1 0000111
可见原码无法进行加法计算

反码:
正数:正数的反码与原码相同。
负数:负数的反码,符号位为“1”,数值部分按位取反。
+7= 0 0000111
-7= 1 1111000

补码:
正数:正数的补码和原码相同。
负数:负数的补码则是符号位为“1”,数值部分按位取反后再在末位(最低位)加1。也就是“反码+1”。
+7= 0 0000111
-7= 1 1111001


a. 采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值。采用补码进行运算,所得结果仍为补码。

8位的二进制数11111011不就是十进制的-5吗,为什么不是

B
[x-y]补=[x]补-[y]补;
则[x]补=[x-y]补+[y]补
最高位的1冒出了数据容器,并且经判断无溢出
验证:【1101】的真值为-3,【1110】的真值为-2,【1011】的真值为-5;
-5-(-2)=-3

补码与原码的和为2^4
即补码=反码+1
反码=补码-1
则x-y反码为1100
y反码为1101
x-y原码为0011
y原码为0010
x=x-y+y
x原码为0101
x反码为1010
x补码为1011

B、1011
补码运算,完全符合常规的二进制运算,即连同符号位、数值位一起运算。
那么:X = 1101 + 1110 = 1011 。

《关于原码和补码的问题帮一下忙,需要解释清楚一点,这样我好知道怎么做...》
答:(4)X= -1000101,Y= -0110011 →[X+Y]补=10111011+11001101=10001000;无溢出。判断是否溢出可以这样:运算时符号位和数据最高位同时有进位或同时无进位则无溢出。

《补码运算问题》
答:计算机采用 8 位数,共构成了 256 个补码。这些补码,其本身的数值是:0 ~ 255。用其中的 0 ~ 127(共 128 个),直接代表零和正数。另外的 128 ~ 255(共 128 个),则代表了 128 个负数。这 128 个负数的范围,就是:-128 ~ -1。因此,8 位的补码,表达范围就是:-128 ~ +127。

《补码运算:若X=-51,Y=+108,求[-X]补,[Y]补,[X-Y]补, [-X+Y]补,[-X...》
答:[X-Y]补=[X]补+[-Y]补=111001101+110010100=10110001;这里用两个符号位,异或结果位1,显然溢出了。[-X+Y]补码=[-X]补+[Y]补=000110011+01101100=010011111;没有溢出;[-X-Y]补=[-X]补+[-Y]补=000110011+110010100=111000111;没有溢出 ...

《补码的加减法运算》
答:补码减法 运算公式为: [X]补–[Y]补=[X–Y]补 (3.2) 通过 [Y]补 求得 [–Y]补 可以将减法运算转化为补码的加法运算。 已知 [Y]补求 [–Y]补 的法则是:对 [Y]补各位(包括符号位)取反,末位加1 ,就可以得到[–Y]补 例 [Y]补 =1.1011 则 [–Y]补 =0.0101 [...

《计算机组成原理,定点运算问题,补码运算。老是不会,求详解》
答:这题目,关键是:从 [B]补,求出 [-B]补。对一个补码,减一、取反,即为相反的数的补码。+24 的补码是:0001 1000。减一,得:0001 0111;然后取反:1110 1000。 这就是-24 的补码。

《补码的加法运算。图中的两个例子是错误的,怎么做才是正确的?谢谢!》
答:第1题:x =9/16 =1001b/16d =0.1001b , (将1001b右移4位)y =11/16 =1011b/16 =0.1011b, (将1011b右移4位)设字长8位:[x]补 =0000.1001b [y]补 =0000.1011b (+ --- [x+y]补 =0001.0100b x+y = 10100b/16 = 20/16,(将 1.0100b左移4位)第2题:A...

《如何求补码?》
答:正整数的原码:这个数的二进制,符号位为0;正整数的原码=补码=反码 例1:+66 66的二进制:1000010,所以+66的原码: 0 1000010 =补码: 0 1000010=反码: 0 1000010 负整数的原码:仍是这个数的二进制,符号位为1;负整数的原码、反码、补码计算:先求原码,再求反码,最后求补码...

《计算机基本运算中,补码运算怎样判断数值是否有溢出》
答:再加上-1,也超范围,也会溢出。这两个负数相加之后,将会得出 127,这是个正数。补码计算出现了溢出,最重要的特征是:符号不正确。你只要判断符号正确与否,就可以了。另外,能够超出范围的算法,一定是:正+正、负+负。捎带还有:正-负、负-正。除了这四种算法之外的计算,都不可能溢出。

《什么是补码加减运算溢出,判别溢出有哪几种方法,说明工作原理是什么...》
答:溢出,是通用的词汇,其含义,还是很容易理解的。在计算机中,溢出,专用来说明:“补码运算结果超出预定的范围”。八位的二进制,作为补码,其表示范围是:-128 ~ +127。示意图如下:当你的运算结果,小于-128 时,就会落入 +127 下面的范围,成为正数。当你的运算结果,大于+127 时,就会落入...

《补码运算为什么会溢出》
答:发生溢出时,该组编码,就不能正确的表示数据。不仅是补码计算,任何形式的计算,都可能产生溢出。比如:1999 年、2000 年 ...,这是用 4 位十进制表示。当到了 9999 年,再过一年,你如果还用 4 位表示,就会溢出了。如果不限制编码的位数,那么,就不存在溢出的问题。--- 无符号数的溢出 ...

   

返回顶部
本页内容来自于网友发表,若有相关事宜请照下面的电邮联系
感悟网