我对 JavaScript 中|
OR与^
XOR的使用感到困惑,如下面的简单示例所示;
(function sayHi(n){
if(n < 1) //base case
return;
console.log("Hi!!" | "Hello!!") ;
sayHi(n - 1); //recurse
})(5);
(function sayHi(n){
if(n < 1) //base case
return;
console.log("Hi!!" ^ "Hello!!") ;
sayHi(n - 1); //recurse
})(5);
(function sayHi(n){
if(n < 1) //base case
return;
console.log(2 | 6) ;
sayHi(n - 1); //recurse
})(5);
(function sayHi(n){
if(n < 1) //base case
return;
console.log(2 ^ 6) ;
sayHi(n - 1); //recurse
})(5);
我对何时,如何,为何,我应该适当使用|
vs ^
感到困惑。
有人可以帮我理解OR
和XOR
操作之间的主要区别吗?
我正在阅读来自MDN web Docs的JavaScript文档,以便更好地理解按位操作的概念,但我很难理解它们的显着差异。
我只想确保今后继续正确使用这些操作。
非常感谢您的期待!
答案 0 :(得分:2)
| 是按位或
因此,如果在两个操作数中设置了任一位,则将在结果中设置
^ 是一个异或,所以如果在其中一个操作数中设置了一个位,它将在结果中设置,否则,它将不会被设置。
var x,y;
for (x = 0; x <= 1; x++) {
for (y = 0; y <= 1; y++) {
console.log('XOR '+ x + "^" + y + "=" + (x^y));
console.log('OR '+ x + "|" + y + "=" + (x|y));
}
}
答案 1 :(得分:1)
OR和XOR是不同的运算符:
OR:
0 | 0 = 0
0 | 1 = 1
1 | 0 = 1
1 | 1 = 1
XOR
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
如果你有两个位并将它们与OR组合,结果将为1,如果这些位中的一个或两者都是1.如果将它们与XOR(异或)组合,那么如果只有其中一个,它将为1位是1(如果两者都是如此)。
答案 2 :(得分:1)
按位运算符通常用于检查二进制中的位是否为set
。您可以将其视为一组布尔值,将其压缩为字符串11100101
,其中每个bit
用于表示boolean
标记true
或{{1} },1表示false
,0表示set
。
二进制阅读与我们通常的英语不同。它是从右到左完成的,最左边的位是最重要的位,因为它保持最大值而左侧位是最小的。
示例:强>
值:64 =二进制unset
值:1 =二进制10000000
现在回到你的问题。
问:我很困惑何时,如何,为什么,我应该在哪里使用| vs ^。
答强>
位图掩码及其运算符在低级编程中更常见,其中00000001
是约束(小型计算设备)或memory
关键应用程序。
使用权利有利吗?但它们也有它们的缺点,它是代码performance
。内存很便宜,处理能力比以前大得多,因此人们在进行高级应用程序编程时往往会放弃这一优势。
问:有人可以帮我理解OR和XOR操作之间的主要区别吗?
readability
和OR
操作用于比较两个二进制文件。假设二进制A和二进制B。
外行。可以读取XOR
操作OR
,就好像设置了|
B中的位然后返回OR
,即set
。
示例:强>
1
10000000 // Value 64 in binary
00000001 // Value 1 in binary
10000001 // Gives you 65 when you perform | OR operation
= 65
操作有点像XOR
,但它有另一种特殊功能,即当两个位为OR
时,它会返回same
。
示例:强>
0
从内存中,您通常只使用10000001 // Value 65 in binary
10000000 // Value 64 in binary
00000001 // Gives you 1 when you perform ^ XOR operation
= 1
运算符来检查是否设置了位。所以你可能对它以及AND &
操作更感兴趣。
答案 3 :(得分:0)
您的代码没有意义,按位运算符(OR,XOR,AND)只能用于数字,而不能用于字符串。
每个数字在内存中以位表示,每个位为1或0(真或假,开或关等)。 1和0是数字,就像我们的计数系统中的1,2,3,4是数字。计算机使用的计数系统称为二进制。
按位运算基本上对两个操作数中的每个位执行同名操作(OR,XOR或AND)。
以5 ^ 3(5 XOR 3)为例:
5以二进制表示为00000101
3以二进制表示为00000011
对于每个操作,您有一个左输入和一个右输入。 XOR代表eXclusive OR,如果左或右输入为1则返回1,但如果它们都是1则不返回。 如果任一输入为1,则OR返回1,因此如果两者都为1,则输出也将为1.
对数字进行逐位运算会对每个数字中的每个对应位执行此操作,因此5 ^ 3 = 00000110
,即6。
注意:二进制数从右到左书写。每个数字对应2的幂,就像数字在计数时如何对应10的幂。最左边的数字代表2的最高功率(在这种情况下,2到7,即128)。
同时,5 | 3 = 00000111
,即7。
答案 4 :(得分:0)
它们是不同的数学(逻辑)运算符,与数学相关而不是JavaScript。
OR
/ |
,或称为“包含OR”,类似于英文短语“A和/或B”,有3种可能性:不是A而是B,不是B而是A ,A和B。
XOR
/ ^
,或称为“异或”,类似于英文短语“A或B”,只有两种可能性:不是A而是B,不是B而是A你可以看到“A和B都被排除在外”,因此被称为“独占”。
参考: