本篇文章是我关于原码、反码和补码的一些浅见,可能有部分知识点没有理清,如有不恰当描述,可以一起谈论。
先介绍下真值的概念,真值一般是我们人类的数字的表现形式,比如+1、-1等。
机器数是什么呢?从计算机的角度来看,机器数是一个数的自带符号位的二进制的表现形式。比如真值是+1,机器数就是0000 0001,最高位为符号位,0表示正,1表示负。同理真值为-1,机器数为1000 0001.
原码、反码和补码是计算机存储数据的表现形式。
原码是我们易于理解的十进制数转化为自带符号位的二进制数后的表现形式。
例如:+1(真值) = 0000 0001(原码);-1(真值) = 1000 0001(原码);
原码是真值进行二进制转化一次而来的,也比较容易反推真值。
反码是在原码的基础上将符号位之外的机器数按位取反的值,其中正数的反码值还是与其原码值一样不变,负数的反码形式是在原码的基础上将符号位之外的机器数按位取反的值。
例如:+1(真值) = 0000 0001(原码) = 0000 0001(反码);
-1(真值) = 1000 0001(原码) = 1111 1110(反码);
补码是在原码转换为反码后加1,其中正数的补码值也跟其原码和反码一样不变,负数的补码形式为原码转换为反码后加1。
例如:+1(真值) = 0000 0001(原码) = 0000 00