二进制,有符号数,首位为1的是负数,首位为0的是正数。(规定) 无符号数没有正负之分,所以也没有首位的限制。(规定) (以下示例皆以八位二进制表示)
无符号数 无符号数的原码、反码、补码都一样,皆为该数的二进制表示法
原码 反码 补码 定义 无符号数的原码为该数的二进制表示法 无符号数的反码与原码一样 无符号数的补码与原码一样
举例 1(无符号数)==>0000 0001(原码)==>0000 0001(反码)==>0000 0001(补码)
正数 正数的原码、反码、补码都一样,皆为该数的二进制表示法(同无符号数差不多)
原码 反码 补码 定义 正数的原码为该数的二进制表示法。 正数的反码与原码一样。 正数的补码与原码一样
举例 1==>0000 0001(原码)==>0000 0001(反码)==>0000 0001(补码) (首位为0的表示正数,所以原码、反码和补码的首位都是0)
负数 原码 定义 负数的原码为该数对应的无符号数的二进制,将首位置1。
举例 -1==>1(无符号数)==>0000 0001(无符号数的二进制)==>1000 0001(原码,首位置1)。 (负数的首位为1)
反码 定义 负数的反码为该数原码的符号位不变,其它位取反。
举例 -1==>1000 0001(原码)==>1111 1110(反码,符号为不变,其它位取反)。 (负数的首位为1)
补码 定义 1、负数的补码为该数对应的无符号数的二进制取反加一。 2、负数补码(首位为1)减一,取反表示的是这个数的无符号数的二进制。
举例 1 -128==>128(无符号数)==>1000 0000(-128的无符号数的二进制)==>0111 1111(取反)==>1000 0000(补码,加一)(负数的首位为1) -1==>1(无符号数)==>0000 0001(-1对应无符号数的二进制)==>1111 1110(取反)==>1111 1111(补码,加1)(负数的首位为1)
2 1000 0000(补码) ==> 0111 1111(减一) ==> 1000 000(取反,无符号数128)==> -128(负数)(负数的首位为1) 1111 1111(补码) ==> 1111 1110(减一) ==> 0000 0001(取反,无符号数1) ==> -1(负数)(负数的首位为1)
后记 计算机皆使用补码。用补码计算,符号位也可以参与运算。若以原码计算,符号位参与运算数据会出错,所以还需要标识符号位,会造成电路设计复杂,故抛弃。若以反码计算,会存在+0与-0的问题,而0在人们的常识中是不存在正负之分的,所以也抛弃。 补码取反加一为该数的相反数(补码) eg: 1 ==> 0000 0001(补码)==>1111 1110(取反) ==>1111 1111(加1) ==> -1 因为二进制有位数限制,所以表示的数大小也有限制,8位表示的无符号数返回为0(0000 0000(补码))~256(1111 1111(补码)),有符号数为-128(1000 0000(补码))~127(0111 1111(补码))