1. 位运算
| 符号 | 描述 | 运算规则 |
|---|---|---|
| & | 与 | 两个位都为1时,结果才为1 |
| | | 或 | 两个位都为0时,结果才为0 |
| ^ | 异或 | 两个位相同为0,相异为1 |
| ~ | 取反 | 0变1,1变0 |
| << | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 |
| >> | 右移 | 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移),Java中为算术右移根据符合位来补(如为负数则补1,正数补0) |
| >>> | 逻辑右移 | 各二进位全部右移若干位,对无符号数,高位补0,有符号数 |
2. 原码
原码就是符号位加上真值 以下以8位来实例
+1的原码为0000 0001-1的原码为1000 0001
3. 反码
正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反
+1的反码为0000 0001-1的反码为1111 1110
4. 补码
通常一个数的二进制是以补码的形式展现
- 正数的补码就是其本身
- 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
+1的补码为0000 0001-1的补码为1111 1111
5. 负数的最小值取负为多少
即负数的最小值 取反 再+1
public static void main(String[] args) {int c = Integer.MIN_VALUE;int d = -c;int e = ~c + 1;System.out.println(c); //-2147483648System.out.println(d); //-2147483648System.out.println(e); //-2147483648c = 0;d = -c;e = ~c + 1;System.out.println(c); //0System.out.println(d); //0System.out.println(e); //0}
6. 打印二进制
public static void print(int num) {for (int i = 31; i >=0; i--) {//把1左移n位 和原数做与运算 两者为1时输出1否则输出System.out.print((num & (1 << i)) == 0 ? "0" : "1");}System.out.println();}
