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
规律:

浙公网安备 33010602011771号