原码反码补码

3 原码、反码、补码

3.1 知识点补充

在计算机内部,所有信息都是用二进制数串的形式表示的。整数通常都有正负之分,计算机中的整数分为无符号的和带符号的。无符号的整数用来表示0和正整数,即自然数;带符号的正数可以表示所有的整数。

由于计算机中符号和数字一样,都必须用二进制数串来表示,因此,正负号也必须用0、1来表示。通常我们用最高的有效位来 表示数的符号(当用8位来表示一个整数时,第8位即为最高有效位,当用16位来表示一个整数时,第16位即为最高有效位。)0表示正号、1表示负号。

这种正负号数字化(0表示正号、1表示负号)的机内表示形式就称为机器码或者机器数,而相应的机器外部用正负号表示的数称为真值。将一个真值表示成二进制字串的机器数的过程就称为编码

无符号数没有原码、反码和补码一说。只有带符号数才存在不同的编码方式。带符号整数有原码、反码、补码等几种编码方式。

**原码即直接将真值转换为其相应的二进制形式,而反码和补码是对原码进行某种转换编码方式。**正整数的原 码、反码和补码都一样,负数的反码是对原码的除符号位外的其他位进行取反后的结果(取反即如果该位为0则变为1,而该位为1则变为0的操作)。而补码是先求原码的反码,然后在反码的末尾位加1 后得到的结果,即补码是反码+1。IBM-PC中带符号整数都采用补码形式表示。

注意,只是带符号的整数采用补码存储表示的,浮点数另有其存储方式。

  1. 正数的补码是其本身
  2. 负数的反码,符号位不变,其余的按位取反
  3. 负数的补码,反码加1

对于字长为8位有符号的int,因为最高为符号位,占1位,所以最小为(1111111)2 = (-127)10,最大为(0111111)2 = (127)10;即其原码范围为:-127~127

有符号的8位二进制的原值表达范围为:-127至127,此时共255个数字;然而,8位二进制 的补码排列共有$A_{2}^{8}$ = 256个,0000 0000 至1111 1111 。

补码组合 范围 个数
0000 0000 – 0111 1111 0 ~+127 128
10000000 多余的一种组合待定 1
1000 0001 – 1111 1111 -1~-127 127

**10000000 **看似要被浪费掉了啊!其实不然,( 100000000 ) 2 = ( 2^7 ) 10 = ( 128 ) 10,这个组合要利用起来,不能太偏离数值意义,表示128,显得更直观。

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 原码反码补码