原码、反码、补码(重难点)
Java  ·  
对于有符号的而言:
- 二进制的最高位是符号位:0表示整数,1表示负数;
- 正数的原码、反码、补码都一样(三码合一);
- 负数的反码 = 它的原码符号位不变,其他位取反;
- 负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1;
- 0的反码、补码都是0;
- java没有无符号数,换言之,java中的数都是有符号的;
- 在计算机运算的时候,都是以补码的方式来运算的;
- 当我们看运算结果时,要看它的原码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | public class BitOperator { //编写一个main方法 public static void main(String[] args) { //看老师的推导过程 //1. 先得到 2的补码 => 2的原码 00000000 00000000 00000000 00000010 // 2的补码 00000000 00000000 00000000 00000010 //2. 3的补码 3的原码 00000000 00000000 00000000 00000011 // 3的补码 00000000 00000000 00000000 00000011 //3. 按位& // 00000000 00000000 00000000 00000010 // 00000000 00000000 00000000 00000011 // 00000000 00000000 00000000 00000010 & 运算后的补码 // 运算后的原码 也是 00000000 00000000 00000000 00000010 // 结果就是 2 System.out.println(2&3);//2 //推导 //1. 先得到 -2的原码 10000000 00000000 00000000 00000010 //2. -2的 反码 11111111 11111111 11111111 11111101 //3. -2的 补码 11111111 11111111 11111111 11111110 //4. ~-2操作 00000000 00000000 00000000 00000001运算后的补码 //5. 运算后的原码 就是 00000000 00000000 00000000 00000001 => 1 System.out.println(~-2);//1 //推导 //1. 得到2的补码 00000000 00000000 00000000 00000010 //2. ~2操作 11111111 11111111 11111111 11111101 运算后的补码 //3. 运算后的反码 11111111 11111111 11111111 11111100 //4. 运算后的原码 10000000 00000000 00000000 00000011=>-3 System.out.println(~2); //-3 } } |