最早在学单片机知识的时候,遇到二进制、八进制、十六进制、原码、反码及补码等概念。二进制、八进制、十六进制是对数字在不同进制下的表现。而原码、反码及补码是在计算中需要了解的知识点。
计算机的计算,不是我们日常生活中使用的十进制,而是二进制。在表达有符号的数据(正负数据)时,我们用到的+-符号,在二进制数据表达时,是通过在最高位0/1表达的。最高位=0,表示是正数,最高位=1,表示是负数。去掉这个位下的二进制数据数值就是数据的绝对值。这样整个数据的表现形式,就是所谓的原码。
反码,字面理解,就是无视最高位的符号位下的其他数据位的取反。
补码,是反码+1,符号位依旧保持不变。
例如:求+18 和-18 的八位数据形式下的原码、反码、补码形式。
真值 原码 反码 补码
+18 00010010 00010010 00010010
-18 10010010 11101101 11101110
其中的红色标记位,是符号位。
原码、反码、补码这三种形式的总结如下表所示:
在无符号数据的计算时,原码、反码、补码的符号位均为0。