位运算符(面试所用)
位运算符:
左移 <<,右移 >>,无符号右移 >>>,或运算 &,异或运算 ^,反码 ~
1、位运算是直接对二进制进行运算(以后做开发,基本上用不到,为了面试而学)
示例:
结果分析: 要想进行位运算,就得先知道数据的二进制
3的二进制:11
4的二进制:100
又因为,整数默认是int类型,占4个字节
所以得到3和4的原码:
3的原码,反码,补码:00000000 00000000 00000000 00000011
4的原码,反码,补码:00000000 00000000 00000000 00000100
(1)&位与运算:有0则0
00000000 00000000 00000000 00000011
&
00000000 00000000 00000000 00000100
-----------------------------------------------------------
00000000 00000000 00000000 00000000
结果为:0
(2) |位或运算:有1则1
00000000 00000000 00000000 00000011
|
00000000 00000000 00000000 00000100
-----------------------------------------------------------
00000000 00000000 00000000 00000111
结果是:7
(3)^位异或运算:相同则0,不同则1
00000000 00000000 00000000 00000011
^
00000000 00000000 00000000 00000100
-----------------------------------------------------------
00000000 00000000 00000000 00000111
结果位:7
(4) **位**取反**运算:按位取反(1变成0,0变成1),代码中**放在前面(例:~x)
00000000 00000000 00000000 00000011
~
1111111 11111111 11111111 11111100
符号位 数值位
补码: 1 111111 11111111 11111111 11111100
反码: 1 111111 11111111 11111111 11111011
原码: 1 000000 00000000 00000000 00000100
结果位:-4
(5)<<位左移运算:左移n位,结果是数值乘上2的n次方
>>位右移运算: 右移n位,结果是数值除以2的n次方
示例:
(6)<<位左移运算:左边最高位丢掉,右边用0补齐
>>位右移运算:最高位向右移动,最高位如果是0,用0补齐;最高位如果是1,用1补齐
>>>位无符号右移:最高位向右移动,无论最高位是0还是1,都用0补齐
例①:计算3 << 2 (3<<2,意思是3左移两位)
计算得出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
例5:-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号