计算机中二进制数的表示方法都是补码吗?( 二 )

计算机中二进制数的表示方法都是补码吗?

Patterson和Hennessy老爷爷和我们说了很多道理,最后,找到了表示signed numbers的一种最优方法:补码表示~~ 所以,我认为,补码是用来表示signed numbers的,原码是用来表示unsigned numbers的,至于浮点数,IEEE 754里面又有一套表示方法(移码应用到其中)。其实。。。讲道理的话。。。干嘛要用补码表示unsigned int呢?还浪费了1 bit.。。。导致能表示的范围直接缩小一半啊有木有!!!或者。。。直接看C语言就好啦~~~C中的unsigned in t和 int 的表示范围。。。对吧。。。—————————————————————————————————————————— 以上是我的一些看法,如有错误,欢迎指正。
■网友
对@自由无用的蔬菜 的答案补充一下,计算机中,补码是用来表示有符号的负数,方便有符号负数运算,signed numbers中正数的依然是以原码形式保存,因为正数的补码和原码是相同的。
所以可以说是二进制在计算机中都是以补码形式储存。
【计算机中二进制数的表示方法都是补码吗?】 对有符号数取补码一方面好处是方便计算机进行有符号运算,
另一方面好处就是求有符号正数的补码时,可以自动将符号位处理一并处理了。
例如7的
原码:0 000 0111 (此时符号位为0,表示正数)
补码:1 111 1001 (前面的符号位自动在取补码的时候转换了)
计算机用此时7的补码来表示-7,这样有符号的负数运算就可以用电路实现:
0000 0111
+ 1111 1001
= 0000 0000

但是,这里需要注意一下,一个有符号负数求补码的话,此时不能顺便将符号位一并处理了,
需要单独将符号位孤立起来,剩下的部分再取反加一求补码,例:
-7二进制有符号数:
1 0000111
其补码:
1 1111001

有符号二进制数在计算机里都是以其正数的补码的形式存在的,
即,有符号的-7是1000 0111,但在计算机里是以1111 1001形式储存的。

■网友
floating-point notaion 中的 exponent 可能是用 excess notation 的。参考文献:J.Glenn Brookshear Computer Science: An Overview 11th Edition


推荐阅读