机器数

一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。比如,十进制数 +3 ,计算机字长为8位,转换成二进制就是0000 0011,如果是 -3 ,就是1000 0011 。那么,这里的0000 0011和1000 0011就是机器数

真值

因为有符号位,所以机器数的形式值就不等于真正的数值。例如,上面的有符号数1000 0011,其最高位1代表负,其真正数值是 -3 而不是形式值131。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值:0000 0001的真值 = +000 0001 = +1;1000 0001的真值 = –000 0001 = –1

原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值,如:+1 = 0000 0001,-1 = 1000 0001,第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就

反码

反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反,如:+1 = 0000 0001(原) = 0000 0001(反);-1 = 1000 0001(原)= 1111 1110(反)

补码

1 – 补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上,符号位不变,其余各位取反,,最后 +1(即在反码的基础上 +1),如:+1 = 0000 0001(原)= 0000 0001(反)= 0000 0001(补);-1 = 1000 0001(原)= 1111 1110(反)= 1111 1111(补)

2 – 补码表示的溢出问题

(1)由于计算机中的数字用补码表示,例如8位的 byte 类型的表示范围为:[-127, 127],如:0 = 0000 0000(补),-128 = 1000 0000(补),127 = 0111 1111(补码)。当 byte 类型的变量超上限127时

  A. 128 = 127 + 1 

       = 0111 1111(补)+ 0000 0001(补) 

       = 1000 0000(补) 

       = -128

  B. 129 = 127 + 2 

       = 0111 1111(补)+ 0000 0010(补) 

       = 1000 0001(补) 

       = -127

(2)当 byte 类型的变量超过下限-128时

  A. -129 = -128 – 1 

         = 1000 0000(补) – 0000 0001(补) 

         = 0111 1111(补) 

         = 127

  B. -130 = -128 – 2 

         = 1000 0000(补) – 0000 0010(补) 

         = 0111 1110(补) 

         = 126

4 – 关于补码溢出的问题,可用一张图来描述(以 8 bit 为例)

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文为self-epoch原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/self-epoch/p/10968981.html