public static void main(String[] args) {
/**
* & 与运算
* 1, 二进制都为1才为1;
*
*/
/*System.out.println(5 & 3); // 101 & 11 = 1 --> 1
System.out.println(5 & 3); // 11 & 101 = 1 --> 1
System.out.println(-5 & 4); // 11111011 & 100 = 0 --> 0
System.out.println(-10 & 5); // 11110110 & 101 = 100 --> 4
*/
/**
* | 或运算
* 1, 如果相对应位都为0,则结果为0,否则为1
* 2, 只取8位进行计算, 不是32位
*/
/*System.out.println(5 | 3); // 101 | 11 = 111 --> 7
System.out.println(3 | 5); // 11 | 101 = 111 --> 7
System.out.println(-5 | 3); // 11111011 | 11 = 11111111 --> -3
System.out.println(5 | -3); // 101 | 11111101 = 11111101 --> -5
*/
/**
* ~ 非运算, 按位取反
* 1,重点
* 2, 流程: 原码 --》 反码 --》 补码 --》补码 --》反码 --》 原码
* 2,取八位计算,int(32位):
* 比如 :5 的二进制 补码是: 00000101
* 取反补码是: 11111010
* 补码转反码-1: 11111001
* 反码转原码(最高位为1,负数):10000110
* 结果: -6
*
* 如果是负数:-5
* -5的补码: 11111011
* -5取反补码: 00000100
* 现在补码是正数: 即结果为:4
*/
/*System.out.println("----非运算 ~ -----");
System.out.println(~5);
System.out.println(~-5);*/
/**
* ^ 异或运算
* 1, 相对应位相同,则结果为0,否则为1:
* 例如:110 ^ 110 = 000 --> 0
* 2, 负数运算:-6 ^ 5:(取八位计算)
* -6补码:11111010
* 5补码: 00000101
* -6^5补码: 11111111
* 结果反码:11111110
* 原码: 10000001
* 结果:-1
*/
/*System.out.println("----异或运算 ^ -----");
System.out.println(6^6); // 110 ^ 110 = 000 ---> 0
System.out.println(6^5); // 110 ^ 101 = 011 --> 3
System.out.println(-6^5); //
*/
/**
* >> 右移
* 右端被移除,左端移入原来最高位,现在最高位是1
* 例子:-5 >> 1:
* -5补码:11111011
* 右移1位:11111101 :右端被移除,左端移入原来最高位,现在最高位是1
* 反码: 11111100:减去1
* 原码: 10000011:
* 结果: -3
*/
/*System.out.println("----右移 >> -----");
System.out.println((4>>2)); // 100 >> 2 = 1 --> 1
System.out.println(8>>2); // 1000 >> 2 = 10 --> 2
System.out.println(4>>1); // 100 >> 1 = 10 -->2
System.out.println(8>>1); // 1000 >> 1 = 100 -->4
System.out.println(-5>>1); //
*/
/**
* << 左移
* 最高位溢出,最低为补0
*
*/
/*System.out.println(4<<2); // 100 << 2 = 10000 --> 16;
System.out.println(10<<2); // 1010 << 2 = 101000 --> 40
*/
/**
* >>> 无符号右移
* 最低位移除,最高位补零,与 ‘>>’ 最高位移入最高位不同
* 例子:-10>>>2
* -10补码: 11111111 11111111 11111111 11110110
* 右移两位: 00111111 11111111 11111111 11111101
* 结果: 1073741821
*/
/*System.out.println(10>>>1); // 1010 >>> 1 = 0101 --> 5
System.out.println(10>>>2); // 1010 >>> 2 = 0010 ---> 2
System.out.println(2>>>3); // 0010 >>> 3 = 0000 ----> 0
System.out.println(-10>>>2); //
*/
/**
* 例子:128 >> 1 returns 128/ 2 = 64
256 >> 4 returns 256/ 16 = 16
-256 >> 4 returns -256/ 16 = -16
16<<2 return 16 * 4 = 64
-16<<2 return -16 * 4 = -64
*/
System.out.println(-256>>4); //-16
System.out.println(-32>>2); //-8
System.out.println(16<<2); //16*2*2 = 64
System.out.println(-16<<2); //-16*2*2 = -64
System.out.println(256>>>4); //16
System.out.println(-256>>>4); //268435440
}