快速理解位運算:
- 位運算比其他運算(加減乘除)更加底層臭家,所以運算的更快并炮,但是不是所有場景都可以用
- 位運算只針對整數(帶符號)补君,小數進行位運算會先自動轉為整數坤溃,再進行計算
-
數字的表示
ct_js_integer_binary_signed_32bits.gif
將我們一般使用的十進制整數轉換為二進制拍霜,其他位數補0,這樣就有32位了薪介,正數位31為0祠饺,負數位31為1,這樣就可以表示正負數了汁政。
位運算
- 或|(一位為1即為1)
1001
0011
結果:1011 - 與&(每位為1才為1)
1001
0011
結果:0001 - 異或^(每位不同才為1)
1001
0011
結果:1010 - 非~(取反)
1001
結果:0110 - 左移<<(向左移動道偷,用0補位)
3<<2
0000 0000 0000 0000 0000 0000 0000 0011
左移2位
00 0000 0000 0000 0000 0000 0000 0011
用0補位
0000 0000 0000 0000 0000 0000 0000 1100 - 帶符號右移>>
- 負數右移:-3>>2
-3的32位:1000 0000 0000 0000 0000 0000 0000 0011
1、保持31位(符號位)不變记劈,取反:
1111 1111 1111 1111 1111 1111 1111 1100
2勺鸦、加1:
1111 1111 1111 1111 1111 1111 1111 1101
3、右移2位:
1111 1111 1111 1111 1111 1111 1111 11
4目木、高位補1:
1111 1111 1111 1111 1111 1111 1111 1111
5换途、保留符號位取反:
1000 0000 0000 0000 0000 0000 0000 0000
6、加1:
1000 0000 0000 0000 0000 0000 0000 0001
結果:1000 0000 0000 0000 0000 0000 0000 0001 -----(-1) - 正數右移:3>>2
3的32位:0000 0000 0000 0000 0000 0000 0000 0011
1、右移2位:
00 0000 0000 0000 0000 0000 0000 0000
2怀跛、高位補0:
0000 0000 0000 0000 0000 0000 0000 0000
結果:0000 0000 0000 0000 0000 0000 0000 0000 -----(0)
- 不帶符號右移>>> --永不為負
-3>>>2
-3的32位:1000 0000 0000 0000 0000 0000 0000 0011
向右移動2兩位:
10 0000 0000 0000 0000 0000 0000 0000
高位補0:
0010 0000 0000 0000 0000 0000 0000 0000
結果:0010 0000 0000 0000 0000 0000 0000 0000 -----(1073741823)