整数表示

本文为《深入理解计算机系统》— 「2.2 整数表示」章节的小结。

补码

无符号数的编码

补码编码

C语言标准并没有要求要用补码形式来表示有符号整数,但是几乎所有的机器都是这么做的。在补码(two’s -complement )的定义中,将字的最高有效位解释为负权(negative-weight)。

有符号数还有两种表示形式:反码(ones’-complement )和源码(sign-magnitude)。

有符号数和无符号数之间的转换

补码转换为无符号数

无符号数转换为补码

在C语言中对同时包含有符号和无符号数表达式的处理时,有需要注意的地方:

Go语言就避免了这个可能会犯错的地方。因为Go语言在对同时包含有符号数和无符号数表达式的处理时,不会进行隐式强制转换,需要我们自己进行强制转换。

扩展数字

无符号数的扩展

补码数的符号扩展(扩展的位等于补码的最高有效位)

截取数字

截取无符号数

截取补码数值

参考资料

《深入理解计算机系统第三版》