隨鈊乄鎍慾 发表于 2013-5-21 18:30:41

请教各位我怎样才能正确区分一个值是不是补码?

本帖最后由 s0512 于 2013-5-25 15:24 编辑

如题:请教各位我怎样才能正确区分一个值是不是补码?

熊文杰 发表于 2013-5-21 18:30:42

一般补码针对有符号运算才有意义。无符号运算没有这个。有符号运算,最高位为1表示负数,最高位为0表示为正数,负数一般就用补码表示。比如说一个8位的char。能够表示的范围是-128~127
最高位为0为正,其他7为全部为1就是正数能够表示的最大的数,也就是127
为了让计算机方便计算正数和负数,这里有假设1+(-1) = 0;计算机只识别2进制的加减,所以必须要把-1转换成相应的一个二进制表示 使得(-1) + 1 = 0;
于是有补码。
什么数能够让0000001 +? = 00000000呢?
把00000001取反加1,11111111.用来表示-1;
11111111+00000001 = 00000000 产生的进位会纳入进位标志寄存器中暂时保存


想一眼看出一个有符号类型的值是不是补码表示的,最简单的方法是,把表示的值转换成正数 看是否超过了其能够表示的正数的最大值,如果超过了 就表示是用的补码表示的。
比如
short int a = 0xffff;
这里0xffff就是-1的补码表示。
0xffff转换成正数是2的17次方减去1 明显大于short int的正数范围,所以0xffff就是补码

希望这样解释 你能明白。

小丑Delta 发表于 2013-5-21 18:40:38

没什么区别的 一个二进制数 可以是补码也可以是 原码,那要你自己怎么看!一般数据的保存都是二进制补码的!至于其他的 我就不是很清楚了,等待高手解答

隨鈊乄鎍慾 发表于 2013-5-21 20:50:40

熊文杰 发表于 2013-5-21 19:21 static/image/common/back.gif
一般补码针对有符号运算才有意义。无符号运算没有这个。有符号运算,最高位为1表示负数,最高位为0表示为正 ...

太明白了!你解释得太好了。

jjaicx 发表于 2013-5-22 21:07:24

2楼正解啊,哈哈
页: [1]
查看完整版本: 请教各位我怎样才能正确区分一个值是不是补码?