常用的位运算
1、按位與 &?
? ? ??0 & 0 = 0;0 & 1 = 0;1 & 0 = 0;1& 1 = 1
? ? ? 同時為1則結果為1,否則為0;
? ? ? 如3 & 8? ? ??3 = 00000011? ???5 = 00000101? ? ? 結果為? 00000001
2、按位或 ||
? ? ??0|0=0; 0|1=1; 1|0=1; 1|1=1;
? ? ? 兩個數中只要有一個為1,則結果為1;同時為0 則結果為0;
3、異或 ^
? ? ?兩個數相同則結果為0,不同則結果為1;
? ? ??0^0=0; 0^1=1; 1^0=1;1^1=0;
? ? ? ?例如:01111010 ^?00001111 =?01110101
4、左移運算符<<
? ? ? ?a = a << 2;
? ? ? ?將 a 的二進制數左移 2 位,右補 0,若 a = 15,即二進制數 00001111,左移2位得到 00111100,即十進制數60.
高位左移后溢出,舍棄不起作用。左移一位相當于該數乘以2。但些結論只適用于該數左移時被溢出舍棄的高位中不包含1 的情況。
? ? ? ? 注意:100<<1 是10005、右移運算符>>
? ? ? ? a >> 2 表示將 a 的各二進位右移 2 位。移到右端的低位被舍棄,對無符號數,高位補 0。
? ? ? ? 如 a = 017 時:a = 00001111 >> 2??00000011
右移一位相當于除以 2 ,右移 n 位相當于除于 2^n。
在右移時,需要注意符號位問題。對無符號數,右移時左邊高位移入 0。對于有符號的值,如果原來符號位為 0 (該數為正),則左邊也是移入 0,如果上例表示的那樣,如果符號位原來為 1(該數為負),則左邊移入的 0 還是 1 ,要取決于所用的計算機系統。移入 0 稱為 邏輯右移,即簡單右移。移入 1 稱為 算術右移。
參考:詳細版位運算講解
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: Lintcode--4(1)--A+B
- 下一篇: MATLAB提取矩阵中的一部分