在MATLAB中有这样一条命令
typecast(uint8(255),'int8')
ans=-1
uint8(255) 的结果是 1111 1111(B)
将以上结果取反码 1000 0000(B)
再取补码 1000 0001(B) 也就是十进制的-1
对于一个有符号的8位二进制数,原码、反码和补码所能表示的范围如下。
原码:11111111B~01111111B(-127~127)
反码:10000000B~01111111B(-127~127)
补码:10000000B~01111111B(-128~127)
对于正数来说,其二进制 原码、反码、补码都相同
为什么要引入补码呢?
引入补码是为了解决计算机中数的表示和数的运算问题,使用补码,可以将符号位和数值域统一处理,即引用了模运算在数理上对符号位的自动处理,利用模的自动丢弃实现了符号位的自然处理,仅仅通过编码的改变就可以在不更改机器物理架构的基础上完成的预期的要求。