二进制正负数及0的原码、反码、补码之间的转化(附标志位解释)

时间:2021-08-18 03:38:19
1、0的原码反码补码
 
  0原码是00000000
  -0原码是10000000
 
  0反码是00000000
  -0反码是11111111
 
  0补码是00000000
  补码没有正0与负0之分。
 
首先,计算机都是使用二进制的补码进行计算。
2、二进制
1、正数的二进制原码、反码、补码都是相同的
 
2、负数的二进制原码:负数的绝对值的二进制的最高位变为1(1是标志位,只用来表示正负,1表示负数,0表示是正数。所以八位二进制的取值范围是[-127,127]),其余位与正数原码相同。
比如-32
第一步:32(10)=00100000(2)
第二步:最高位变为1:10100000
 
3、负数的反码:等于原码的最高位不变,其余取反。
比如-32
原码为:10100000
反码为:11011111
 
4、负数的补码:等于原码的最高位不变,其余取反,然后加一。
比如-32
第一步,原码为:10100000
第二步,最高位不变取反:11011111
第三步,加一得补码:11100000
 
原码变成反码:最高位不变,其余取反
原码变成补码:最高位不变,其余取反之后加一。
补码变成移码:补码最高符号位取反就是移码。
 
 3、定点小数、定点整数和浮点数的范围
 
(1)16位无符号整数范围:0 ~ 216-1,即0~65535
(2)16位原码定点小数范围 :  -(1-2-15)~+(1-2-15)
(3)16位移码定点整数范围:  -215~+(215-1)  即-32768~+32767
(4)16位补码定点整数范围:  -215~+(215-1)  即-32768~+32767
下述格式浮点数范围:关于原点对称的
最大正数:+0.111 1111*21111 1111=+(1-2-7)*2127
最小正数:+0.100 0000*20000 0000=+2-1*2-128=+2-129
最大负数:-0.100 0000*20000 0000= - 2-1*2-128= - 2-129
最小负数:- 0.111 1111*21111 1111= - (1-2-7)*2127
 
4、标志位解释
 
1、CF(进位标志) =1 算术操作最高位产生了进位或借位, =0 最高位无进位或借位( CF=1 则说明了有进位或借位,CF=0 则说明了无借位);
2、PF(奇偶标志) =1 数据最低8位中1的个数为偶数 ,=0 数据最低8位中1的个数为奇数 ;
3、AF(辅助进位标志) =1 D3→D4位产生了进位或借位 ,=0 D3→D4位无进位或借位 ;
4、ZF(零标志) =1 操作结果为0,=0 结果不为0;
5、SF(符号标志) =1 结果最高位为1 ,=0 结果最高位为0;
6、OF(溢出标志) =1 此次运算发生了溢出, =0 无溢出。