移位运算子、逻辑运算、位元运算
电脑位元运算,移位运算子将数值的二进位表示法向左或向右移动的位数,以达到乘除以 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。
以上只是二进位,移位运算子、逻辑运算、位元运算的模拟计算不存在意义。