Java学习笔记16——位运算符


位运算符是直接对二进制参与运算的 << , >> , >>> , & , | , ^ , ~   位运算开发的时候不一定会用到,但是面试和笔试的时候可能会有这样的题目   位运算: 位运算分析:   int x = 3; int y = 4;   System.out.println(x & y); //0 System.out.println(x | y); //7 System.out.println(x ^ y); //7 System.out.println(~x); //-4   分析: 要想进行位运算,就得先知道数据的二进制 3的二进制:11 4的二进制:100 又因为,整数默认是int类型,占4个字节 所以得到3和4的原码: 3的原码,反码,补码:00000000 00000000 00000000 00000011 4的原码,反码,补码:00000000 00000000 00000000 00000100   &位与运算:有0则0 00000000 00000000 00000000 00000011 & 00000000 00000000 00000000 00000100 ----------------------------------- 00000000 00000000 00000000 00000000 结果为:0   |位或运算:有1则1 00000000 00000000 00000000 00000011 | 00000000 00000000 00000000 00000100 ----------------------------------- 00000000 00000000 00000000 00000111 结果是:7   ^位异或运算:相同则0,不同则1 00000000 00000000 00000000 00000011 ^ 00000000 00000000 00000000 00000100 ----------------------------------- 00000000 00000000 00000000 00000111 结果位:7   ~位取反运算:按位取反(1变成0,0变成1) 00000000 00000000 00000000 00000011 ~ ----------------------------------- 1111111 11111111 11111111 11111100   符号位 数值位 补码: 1 111111 11111111 11111111 11111100 反码: 1 111111 11111111 11111111 11111011 原码: 1 000000 00000000 00000000 00000100 结果位:-4           =======================================================================   <<:左移 左边最高位丢掉,右边用0补齐 >>:右移 右移后最高位如果是0,用0补齐,如果最高位是1,用1补齐 >>>:无符号右移 无论最高位是0还是1,都用0补齐         3 << 2 == 12 计算得出3的二进制原码,反码,补码 3的原码,反码,补码:00000000 0000000 0000000 00000011 (00)000000 0000000 0000000 0000001100 结果是:12       24 >> 2 计算出24的二进制:11000 24的原码,反码,补码: 00000000 00000000 00000000 00011000 00000000 00000000 00000000 00000110(00) 结果是:6       24 >>> 2 计算出24的二进制:11000 24的原码,反码,补码: 00000000 00000000 00000000 00011000 00000000 00000000 00000000 00000110(00) 结果是:6       -24 >> 2 先算出24的二进制:11000 -24的原码:10000000 00000000 00000000 00011000 -24的反码:11111111 11111111 11111111 11100111 -24的补码:11111111 11111111 11111111 11101000 11111111 11111111 11111111 11111010(00) 补码:11111111 11111111 11111111 11111010 反码:11111111 11111111 11111111 11111001 原码:10000000 00000000 00000000 00000110 结果为:-6   -24 >>> 2 先算出24的二进制:11000 -24的原码:10000000 00000000 00000000 00011000 -24的反码:11111111 11111111 11111111 11100111 -24的补码:11111111 11111111 11111111 11101000 00111111 11111111 11111111 11111010(00) 原码,反码,补码都一样: 00111111 11111111 11111111 11111010 结果为:1073741818         规律: