位運算總結
位運算總結
- 按位與 &
按位與運算將參與運算的兩數對應的二進位制位相與,當對應的二進位制位均為 1 時,結果位為 1,否則結果位為 0。
0000 0101 & 0000 1000 = 0000 0000
判斷奇偶:這是因為奇數的二進位制最低位始終為 1,而偶數的二進位制最低為始終為 0。所以,無論任何奇數與 1 即 0000 0001 相與得到的都是 1,任何偶數與其相與得到的都是 0。
if( 3 & 1) {
// 奇數
} else {
// 偶數
}
/*
0011 & 0001 = 0001
0101 & 0001 = 0001
*/
- 按位或 |
按位或運算將參與運算的兩數對應的二進位制位相或,只要對應的二進位制位中有 1,結果位為 1,否則結果位為 0。
0000 0011 | 0000 0111 = 0000 0111
- 按位異或 ^
按位異或運算將參與運算的兩數對應的二進位制位相異或,當對應的二進位制位值不同時,結果位為 1,否則結果位為 0
0000 1100 ^ 0000 0111 = 0000 1011
變數交換
a = 3, b = 5
a = a ^ b
b = a ^ b
a = a ^ b
// 最後輸出 a = 5, b = 3
- 按位取反 ~
按位取反運算將二進位制數的每一個位上面的 0 換成 1,1 換成 0.
// 數字 9 按位取反
~0000 1001
= 0000 1001 // 補碼,正數補碼即原碼
= 1111 1010 // 取反
= -10
// 數字 -20 按位取反
~0001 0100
= 1110 1011 + 1 // 負數的補碼 = 負數的絕對值取反 + 1
= 1110 1100 # 補碼
= 0001 0011 # 取反
= 19
由上可推出 -x = -(x + 1)
- 左移運算 <<
左移運算將數對應的二進位全部向左移動若干位,高位丟棄,低位補 0
5 << 4
= 0000 0101 << 4
= 0101 0000 // 高位丟棄,低位補 0
= 80 // 等價於 5 * 2^4 = 5 * 16 = 80
左移運算 x << n = x(2)^n
6. 右移運算 >>
右移運算將數對應的二進位全部向右移動若干位。對於左邊的空位,如果是正數則補 0,負數可能補 0 或 1
80 >> 4
= 0101 0000 >> 4
= 0000 0101 // 正數補0,負數補1
= 5
右移運算正好是左移的逆運算,即 x >> n = x ÷ (2)^n
取 x 的第 k 位
// 即取數字 x 對應的二進位制的第 k 位上的二進位制值。假設數字為 5,其對應的二進位制為 0000 0101,取第 k 位二進位制值的位運算為 x >> k & 1
x = 5 // 0000 0101
for(let i = 0; i< 8; i++){
console.log( x >> i & 1)
}
// 1 0 1 0 0 0 0 0
這裡也體現了一點,位運算子的優先順序 >> 大於 & 的優先順序
- 位掩碼
相關文章
- 【技巧總結】位運算裝逼指南
- [乾貨] 位運算面試題大總結面試題
- 程式設計中位運算用法總結程式設計
- 面試官常問的位運算問題總結面試
- SIFT運算元總結
- 二進位制、位運算、位移運算
- (位運算)兩個字串的位運算字串
- 四則運算之總結
- 四則運算app總結APP
- 位運算
- 理解位運算
- SQL位運算SQL
- 使用位運算進行加法運算
- 【資料結構與演算法】位運算資料結構演算法
- 學習位運算
- PHP 位運算使用PHP
- 位運算進階
- 巧用JS位運算JS
- 位運算-異或(^)
- java二進位制運算十進位制(精確運算)Java
- Flink的DataSet基本運算元總結
- 軟體工程之四則運算總結軟體工程
- 運算整數C/C++位運算技巧C++
- 計算機基礎:位運算計算機
- JS中的位運算JS
- 位運算簡單操作
- Java位運算小節Java
- Java中的位運算Java
- 位運算的應用
- ~ 按位取反運算解析
- iOS 開發 – 位運算iOS
- 位運算子的計算
- C語言位運算C語言
- 四則運算App--大總結(已完成)APP
- 位運算與SQL實現SQL
- 【演算法】位運算技巧演算法
- 【每日演算法】位運算演算法
- 演算法之位運算演算法