关于原码、反码和补码
首先了解机器数和机器数的真值。
机器数和机器数的真值
1、机器数
数字在计算机中的二进制表现形式。
- 符号数值化:数据的正负号,在机器里用一位二进制的0或1来区别。通常这个符号放在二进制数的最高位(称符号位),用0代表符号“+”,用1代表符号“-”。
- 二进制的位数受机器设备的限制。机器内部设备一次能表示的二进制位数叫机器字长。一台机器的字长是固定的(如8位、16位、32位、64位)。
1
2
3比如在字长为8的计算机中。
十进制的+5,其机器数为:00000101
十进制的-5,其机器数为:10000101
2、机器数的真值
机器数有符号占据一位,所以机器数的形式值就不等于真值。
1 | 例如机器数:10000101 |
机器数的三种形式
1、原码
原码:将数的真值形式中“+”用0表示,“-”用1表示。
1 | +5原码:00000101 |
加减法运算复杂。
2、反码
正数的反码与原码相同;负数的反码是对其原码数值位(不包含符号位)逐一取反。
1 | +5原码:00000101 反码:00000101 |
3、补码
正数的补码与原码相同;负数的补码是符号位不变,其余位取反,再末位+1(相当于反码末位+1)。
1 | +5原码:00000101 反码:00000101 补码:00000101 |
数据在计算机中是以其补码形式存储和运算的。
- 补码运算时,其符号位与数值部分一起参与运算。
- 补码运算时,其运算结果仍为补码。(在转换为真值时,若符号位为 0,数位不变;若符号位为 1,应将结果求补才是其真值。)
java转换二进制:
1 | //Integer.toBinaryString() |
二进制数的四则运算
- 加运算:0+0=0;1+0=1;0+1=1;1+1=10(逢2进1)。
- 减运算:1-1=0;1-0=1;0-0=0;0-1=1(向高位借1当2)。
- 乘运算:0 * 0=0;0 * 1=0;1 * 1=1。
- 除运算:1除以1=1;0除以1=0。