按位运算如何工作?
How do the bitwise operations work?
我遇到过奇怪的运算符,例如 &
、|
、^
等。这些运算符究竟是如何工作的?
>>> 10 | 7
15
>>> 10 ^ 7
13
>>> 10 & 7
2
>>>
这种模式看起来确实很奇怪,而且大多数来源都没有给出易于理解的答案。
BITWISE AND
行 1
中的每个项目 乘以 行 2
中的相应值:
a = 5 # In binary: 0101
b = 3 # In binary: 0011
c = a & b # In binary: 0001
print c # In decimal: 1
BITWISE OR
如果任一行的任意项为1
,对应的结果为1
:
a = 5 # In binary: 0101
b = 3 # In binary: 0011
c = a | b # In binary: 0111
print c # In decimal: 7
BITWISE XOR
如果每列中的项目彼此不同,则结果为1
:
a = 5 # In binary: 0101
b = 3 # In binary: 0011
c = a ^ b # In binary: 0110
print c # In decimal: 6
这可能对您有所帮助
Bitwise operators guide in MDN
您也可以使用 chrome javascript 控制台来测试所有这些运算符。
在javascript中尝试这样
var a = 5;
var b = 6;
console.log((a & b)); //AND
console.log((a | b)); //OR
console.log((a ^ b)); //XOR
console.log((~a)); //NOT
console.log((a << b)); //Left Shift
console.log((a >> b)); //Sign propagating right shift
console.log((a >>> b)); //Zero fill right shift
我遇到过奇怪的运算符,例如 &
、|
、^
等。这些运算符究竟是如何工作的?
>>> 10 | 7
15
>>> 10 ^ 7
13
>>> 10 & 7
2
>>>
这种模式看起来确实很奇怪,而且大多数来源都没有给出易于理解的答案。
BITWISE AND
行 1
中的每个项目 乘以 行 2
中的相应值:
a = 5 # In binary: 0101
b = 3 # In binary: 0011
c = a & b # In binary: 0001
print c # In decimal: 1
BITWISE OR
如果任一行的任意项为1
,对应的结果为1
:
a = 5 # In binary: 0101
b = 3 # In binary: 0011
c = a | b # In binary: 0111
print c # In decimal: 7
BITWISE XOR
如果每列中的项目彼此不同,则结果为1
:
a = 5 # In binary: 0101
b = 3 # In binary: 0011
c = a ^ b # In binary: 0110
print c # In decimal: 6
这可能对您有所帮助
Bitwise operators guide in MDN
您也可以使用 chrome javascript 控制台来测试所有这些运算符。
在javascript中尝试这样
var a = 5;
var b = 6;
console.log((a & b)); //AND
console.log((a | b)); //OR
console.log((a ^ b)); //XOR
console.log((~a)); //NOT
console.log((a << b)); //Left Shift
console.log((a >> b)); //Sign propagating right shift
console.log((a >>> b)); //Zero fill right shift