1. 位运算

符号 描述 运算规则
& 两个位都为1时,结果才为1
| 两个位都为0时,结果才为0
^ 异或 两个位相同为0,相异为1
~ 取反 0变1,1变0
<< 左移 各二进位全部左移若干位,高位丢弃,低位补0
>> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移),Java中为算术右移根据符合位来补(如为负数则补1,正数补0)
>>> 逻辑右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数

2. 原码

原码就是符号位加上真值 以下以8位来实例

  1. +1的原码为
  2. 0000 0001
  3. -1的原码为
  4. 1000 0001

3. 反码

正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反

  1. +1的反码为
  2. 0000 0001
  3. -1的反码为
  4. 1111 1110

4. 补码

通常一个数的二进制是以补码的形式展现

  1. 正数的补码就是其本身
  2. 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
  1. +1的补码为
  2. 0000 0001
  3. -1的补码为
  4. 1111 1111

5. 负数的最小值取负为多少

即负数的最小值 取反 再+1

  1. public static void main(String[] args) {
  2. int c = Integer.MIN_VALUE;
  3. int d = -c;
  4. int e = ~c + 1;
  5. System.out.println(c); //-2147483648
  6. System.out.println(d); //-2147483648
  7. System.out.println(e); //-2147483648
  8. c = 0;
  9. d = -c;
  10. e = ~c + 1;
  11. System.out.println(c); //0
  12. System.out.println(d); //0
  13. System.out.println(e); //0
  14. }

6. 打印二进制

  1. public static void print(int num) {
  2. for (int i = 31; i >=0; i--) {
  3. //把1左移n位 和原数做与运算 两者为1时输出1否则输出
  4. System.out.print((num & (1 << i)) == 0 ? "0" : "1");
  5. }
  6. System.out.println();
  7. }