移位運算子、邏輯運算、位元運算
電腦位元運算,移位運算子將數值的二進位表示法向左或向右移動的位數,以達到乘除以 2 的冪次方或取得某些位元的效果。邏輯運算表示處理布林值 True & False 的運算,邏輯運算有且 AND、或 OR、非 NOT 和異或 XOR。
移位運算子 Bitwise Operator <<, >> 對二進位數的邏輯運算操作。不帶符號數、移位運算子將資料看成二進位制數向指定位方向移動,溢位的部分將被捨棄,而空缺的部分填入 0 值。
var decimalA = 1; // 二進位 0000000000000001 var decimalB = 2; // 二進位 0000000000000010 var decimalC = 3; // 二進位 0000000000000011
var binaryTotal = decimalA << 6; // 1 << 6 = 64
將 decimalA 向左移位 6 結果得到 64 二進位表示如下。
0000000001000000
var result = decimalB << 3; // 2 << 3 = 16
接著將 decimalB 向左移位 3 結果得到 16 二進位表示如下。
0000000000010000
Bitwise 位元 OR 運算,比較兩個數,然後回傳一個新的數,只要對應的二個二進位有一個為 1 時,結果位就為 1。否則為 0。JavaScript 使用 | 操作數被轉換為 32 位整數。超過 32 位的數字將被丟棄其最高有效位。
binaryTotal = binaryTotal | result; // 64 | 16 = 80
結果得到 80 二進位表示如下。
0000000001000000 // 64 0000000000010000 // 16
0000000001010000 // 80
var result = decimalC << 0; // 3 << 0 = 3
將 decimalC 向左移位 0 結果得到 3 二進位表示如下。0 等於沒有移位。
0000000000000011 // 3
binaryTotal = binaryTotal | result; // 80 | 3 = 83
0000000001010011 // 83
這樣使用移位運算子 << 及 | 把 1, 2, 3 放入一組二進位,結果得到了十進位 83
取回原本的數值
var binaryTotal = 83;
Bitwise 位元 AND 運算,比較兩個數,然後回傳一個新的數,只有對應的兩個二進位均為 1 時,結果位才為 1,否則為 0。JavaScript 使用 & 操作。結果得到 3 二進位表示如下。
var result3 = binaryTotal & 7 // 83 & 7 = 3
0000000001010011 // 83 0000000000000111 // 7
0000000000000011 // 3
這樣使用 AND 運算,result3 已經取回原本的 3。其中因範例只用三位所以使用 7 三位最大為 111
接著將 binaryTotal >> 向右移位 3 結果得到 10,就是溢出 011 將他推出去。
var result = binaryTotal >> 3 // 10
result = 10 二進位表示如下。
0000000000001010 // 10
var result2 = result & 7 // 10 & 7 = 2
0000000000001010 // 10 0000000000000111 // 7
0000000000000010 // 2
同樣使用 AND 運算,result2 已經取回原本的 2。
0000000000001010 // 10
接著再次 result >> 向右移位,將 010 推出去。
var result1 = result >> 3 // 10 >> 3 = 1
0000000000000001
result1 已經取回原本的 1。
以上只是二進位,移位運算子、邏輯運算、位元運算的模擬計算不存在意義。