感悟网 导航

补码运算问题

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

你确实错了:
-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. 采用补码后,可以方便地将减法运算转化成加法运算,运算过程得到简化。正数的补码即是它所表示的数的真值,而负数的补码的数值部份却不是它所表示的数的真值。采用补码进行运算,所得结果仍为补码。

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

计算机采用 8 位数,共构成了 256 个补码。

这些补码,其本身的数值是:0 ~ 255。

用其中的 0 ~ 127(共 128 个),直接代表零和正数。

另外的 128 ~ 255(共 128 个),则代表了 128 个负数。

  这 128 个负数的范围,就是:-128 ~ -1。

因此,8 位的补码,表达范围就是:-128 ~ +127。



因为有符号位,所以数据位只占用7位,7位二进制能够表示的最大正数是2的7次方减1,即+127,这是一个排列组合问题,对于负数,因为补码没有负0,从负1起开始计算,所以能够表示的最小负数的是负的2的7次方,即-128。

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

《已知X=-0.1011,y=-0.0101要求补码运算x+y=? x-y=?判断是否溢出 给出...》
答:负数的补码:负数的补码等于其绝对值的原码各位取反,然后整个数加1的数值。x=-0.1011=11011,x补=10101 y=-0.0101=10101,y补=11011,y补补=10101 x+y=x补+y补=10101+11011=110000=-1.0000 (最后一步按2取模)x-y=x补-y补=x补+y补补=10101+10101=101010=01010 x-y结果反号,...

《补码运算问题》
答:计算机采用 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;没有溢出 ...

《补码怎么算?》
答:补码“模”概念的引入、负数补码的实质、以及补码和真值之间的关系所揭示的补码符号位所具有的数学特征,无不体现了补码在计算机中表示数值型数据的优势,和原码、反码等相比可表现在如下方面:1、解决了符号的表示的问题。2、可以将减法运算转化为补码的加法运算来实现,克服了原码加减法运算繁杂的弊端,可...

《补码的加减法运算》
答:补码减法 运算公式为: [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 的补码。

《补码的基本运算》
答:补码相加后的结果:1010 1100 是答案的补码,要转化成原码,才是最终答案.补码转原码方法同原码转补码,即符号位不变,其余按位取反后+1 1010 1100 求反:1101 0011 求补:1101 0100 即:-84 这里用到了补码的运算规则:[X+Y]补=[X]补+[Y]补 求出[X]补+[Y]补后还要求一次补,才能得到答案...

《补码怎么算》
答:补码的算法如下:一、补码加法[X+Y]补 = [X]补 + [Y]补例:X=+0110011,Y=-0101001,求[X+Y]补[X]补=00110011 [Y]补=11010111[X+Y]补 = [X]补 + [Y]补 = 00110011+11010111=00001010注:因为计算机中运算器的位长是固定的,上述运算中产生的最高位进位将丢掉,所以结果不是...

《补码是怎么算的,原码又是怎么算的?》
答:算法1:补码=原码取反再加1的逆运算。10010110是补码,应先减去1变为反码,得10010101;由反码取得源码即除符号位外其他为按位取反,得11101010,即十进制数的-106。算法2:负数补码速算法,由最低位(右)向高位(左)查找到第一个1与符号位之间的所有数字按位取反的逆运算 10010110是补码,符号位与...

   

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