[英]Difference between (|) Bitwise OR vs (^) Bitwise XOR in JavaScript
我真的對|
的使用感到困惑。 下面的簡單示例說明了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 ^
。
有人可以幫我XOR
OR
和XOR
運算之間的主要區別嗎?
我正在閱讀MDN網絡文檔中有關JavaScript的文檔,以更好地理解按位操作的概念,但是我一直在努力理解它們的顯着差異。
我只想確保此后繼續正確使用這些操作。
非常感謝您的預期幫助!
| 是按位或
因此,如果在兩個操作數中設置了任一位,則它將在結果中設置
^是一個異或,因此,如果在其中一個操作數中設置了一位,則將在結果中對其進行設置,否則,將不會對其進行設置。
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)); } }
OR和XOR是不同的運算符:
要么:
0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1
異或
0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0
如果您有兩個位並將它們與或組合,則結果將為1,如果這些位之一或兩者均為1,則將它們與XOR(異或)組合,則如果這些位中只有一個為1,則結果將為1。 (如果兩者都不是)。
按位運算符通常用於檢查是否在二進制中set
了位。 您可以將其視為一組布爾值,將其壓縮為字符串11100101
,其中每個bit
都用於表示boolean
標志true
或false
,分別為1表示set
和0表示unset
。
二進制閱讀與我們通常的英語略有不同。 它是從右到左完成的,其中最左邊的位是最高有效位,因為它擁有最大值,而左邊的位則最小。
例:
值:64 =二進制10000000
值:1 =二進制00000001
現在回到您的問題。
問:我對何時,如何,為什么,在哪里應該適當使用感到困惑。 vs ^。
答:在memory
受限的小型編程或performance
關鍵型應用程序中,位掩碼及其運算符更常見於低級編程中。
聽起來有利於使用嗎? 但是它們也有缺點,這是代碼的readability
。 內存便宜,處理能力比以前大得多,因此人們在進行高級應用程序編程時往往會放棄這一優勢。
問:有人可以幫我弄清楚OR和XOR運算之間的主要區別嗎?
OR
和XOR
操作用於比較兩個二進制文件。 假設二進制A和二進制B。
用外行術語來說。 OR
運算|
可以讀取,就像A OR
B中的位置1
一樣,然后按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 &
運算符檢查是否設置了位。 因此,您可能對它以及shift
操作更感興趣。
您的代碼沒有意義,按位運算符(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。如果兩個輸入中的任意一個為1,則OR返回1,因此,如果兩個輸入均為1,則輸出也為1。
對數字進行按位運算會對每個數字中的每個對應位執行此操作,因此5 ^ 3 = 00000110
(即6)。
注意:二進制數是從右到左寫的。 每個數字對應於2的冪,就像計數時數字對應於10的冪一樣。 最左邊的數字表示2的最高冪(在這種情況下,為2到7的整數,即128)。
同時,5 | 3 = 00000111
,即7。
它們是不同的數學(邏輯)運算符,比JavaScript與數學的關系更大。
OR
/ |
,或稱為“包含性OR”,與英語短語“ A和/或B”相似,有3種可能:不是A而是B,不是B而是B而是A和B。
XOR
/ ^
或稱為“ XOR
或”,與英語短語“ A或B”相似,只有兩種可能性:不是A而是B,不是B而是A。您可以看到“ A和B都”排除在外,即所謂的“排他”。
參考:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.