位运算符(面试所用)

位运算符:

左移 <<,右移 >>,无符号右移 >>>,或运算 &,异或运算 ^,反码 ~

1、位运算是直接对二进制进行运算(以后做开发,基本上用不到,为了面试而学)

示例:image

结果分析: 要想进行位运算,就得先知道数据的二进制
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次方

示例:image

(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

posted @ 2021-11-26 19:28  阿伟宝座  阅读(325)  评论(0)    收藏  举报