簡體   English   中英

JavaScript中(|)按位OR與(^)按位XOR之間的區別

[英]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 ORXOR運算之間的主要區別嗎?

我正在閱讀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標志truefalse ,分別為1表示set和0表示unset

二進制閱讀與我們通常的英語略有不同。 它是從右到左完成的,其中最左邊的位是最高有效位,因為它擁有最大值,而左邊的位則最小。

例:

值:64 =二進制10000000

值:1 =二進制00000001

現在回到您的問題。

問:我對何時,如何,為什么,在哪里應該適當使用感到困惑。 vs ^。

答:memory受限的小型編程或performance關鍵型應用程序中,位掩碼及其運算符更常見於低級編程中。

聽起來有利於使用嗎? 但是它們也有缺點,這是代碼的readability 內存便宜,處理能力比以前大得多,因此人們在進行高級應用程序編程時往往會放棄這一優勢。

問:有人可以幫我弄清楚OR和XOR運算之間的主要區別嗎?

ORXOR操作用於比較兩個二進制文件。 假設二進制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位為0 ^ 0 = 0
  • 第6位為1 ^ 0 = 1
  • 第7位為0 ^ 1 = 1
  • 第8位1 ^ 1 = 0

同時,5 | 3 = 00000111 ,即7。

  • 0 | 前5位為0 = 0
  • 1 | 第6位為0 = 1
  • 0 | 第7位為1 = 1
  • 1 | 第8位為1 = 1

它們是不同的數學(邏輯)運算符,比JavaScript與數學的關系更大。

OR / | ,或稱為“包含性OR”,與英語短語“ A和/或B”相似,有3種可能:不是A而是B,不是B而是B而是A和B。

XOR / ^或稱為“ XOR或”,與英語短語“ A或B”相似,只有兩種可能性:不是A而是B,不是B而是A。您可以看到“ A和B都”排除在外,即所謂的“排他”。

參考:

https://zh.wikipedia.org/wiki/邏輯連接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM