2017-08-24 9 views
0

で(^)ビット単位のXORビット単位のOR Vsが私は本当に、以下の簡単な例で説明は、JavaScriptにXOR |の使用にOR ^対混乱しています。違いはJavaScript

(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); 

私は^対使用|を充当すべきところとき、どのように、なぜ、について困惑しています。

誰かがORXOR操作の主な違いを理解するのに役立つことができますか?

JavaScriptのドキュメントをMDN web Docsから読んで、ビット単位の操作の概念をよりよく理解していましたが、その重要な違いを理解するために苦労しています。

私はこれらの操作を以後正しく使用していることを確認したいだけです。

ありがとうございました!

+3

なぜ演算子を数値ではなく文字列でテストするための例を作成しましたか? – miroxlav

+1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators – skyline3000

答えて

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 
    

あなたは2つのビットを持っているとORでこれらを組み合わせた場合、これらのビットの1つが返された場合、結果は1になります。 XOR(Exclusive OR)と組み合わせると、これらのビットの1つが1(両方の場合ではない)であれば1になります。

2

|だからビット単位または

のいずれかのビットが2つのオペランドに設定されている場合、1つのビットは、オペランドの1に設定されている場合

^が排他的か、そうである結果に設定されます。結果に設定されます。そうでない場合、設定されません。

var x,y; 
 

 
for (x = 0; x <= 1; x++) { 
 
    for (y = 0; y <= 1; y++) { 
 
\t console.log('XOR '+ x + "^" + y + "=" + (x^y)); 
 
\t console.log('OR '+ x + "|" + y + "=" + (x|y)); 
 
    } 
 
}

0

あなたのコードは、理にかなってビット単位の演算子(OR、XOR、AND)数字ではなく、文字列でのみ使用することができません。

各数字は、ビットごとに1または0(真または偽、オンまたはオフなど)で表されます。 1と0は数字で、ちょうど1、2、3、4の数字は私たちの計数システムの数字です。コンピュータによって使用されるこの計数システムはバイナリと呼ばれます。

ビット単位の演算は、基本的に2つのオペランドのすべての単一ビットに対して名前付き演算(OR、XOR、またはAND)を実行します。

例えば5^3(5 XOR 3)を取る:

5は、各操作の00000011

としてバイナリで表現されて00000101

3としてバイナリで表現され、あなたは左を持っています入力、および右入力。 XORは排他的ORを表し、左または右の入力が1の場合は1を返しますが、両方が1の場合は1を返します。 ORはいずれかの入力が1の場合は1を返し、1の場合は1を返します。また、ある数のビット演算は、各番号にすべての対応するビットのためにこれを行う1

ので、5^3 = 00000110、である6

注:バイナリ番号は右から書かれています左。各桁は2の累乗に対応し、桁がカウントすると10の累乗に対応します。一番左の桁は2の最大累乗を表します(この場合は2〜7、つまり128です)。以下のための第7ビット

  • 1^1 = 0のための6ビット
  • 0^1 = 1の最初の5ビット
  • 1^0 = 1

    • 0^0 = 0第8ビット

    一方、5 | 3 = 00000111、これは7です。

    • 0 |最初の5ビットで0 = 0
    • 1 |第6ビットについて0 = 1
    • 0 |第7ビットについて1 = 1
    • 1 | 1 = 8ビット目の場合は1です。
  • 0

    JavaScriptは、JavaScriptよりも数学に関連しています。ないAが、BではないBが、A、AとBの両方

    OR/|、または "インクルーシブOR" と呼ばれるが、英語のフレーズ "Aおよび/またはB" に似ている、3つの可能性があります

    XOR/^「Exclusive OR」と呼ばれる英語の「AまたはBのいずれか」に似ていますが、AではなくB、BではなくAの2つの可能性があります。 B "は除外され、いわゆる排他的です。

    リファレンス:

    https://en.wikipedia.org/wiki/Logical_connective

    1

    ビット単位演算子は、典型的には、ビットはsetバイナリであるか否かをチェックするために使用されます。ブール値のセットとして視覚的に見ることができます。文字列は11100101です。bitは、それぞれbooleanフラグtrueまたはfalsesetの場合は1、の場合は0を表します。

    私たちの通常の英語とは異なり、バイナリ読み取りが行われます。これは右から左に行われ、最も左側のビットは最大値を保持し、左側のビットは最小であったため、最も重要なビットとなっています。

    例:

    値:64 =バイナリ10000000

    値:今すぐ戻ってあなたの質問に1 =バイナリ00000001

    Q:いつ、どのように、なぜ、どこで適切に使用すべきか混乱しています。 vs ^。

    A: ビットマスクおよびその運営者は、より一般的memory制約(小型のコンピューティングデバイス)またはperformance重要なアプリケーションである低レベルのプログラミングに見られます。

    右利きの音ですか?しかし、彼らには欠点もあり、コードreadabilityです。メモリは安価で、処理能力はこれまでよりもはるかに優れています。そのため、高度なアプリケーションプログラミングを行う際に、このビットを捨てる傾向があります。

    Q: OR演算とXOR演算の主な違いを理解できたら助けてください。

    ORおよびXOR操作は、2つのバイナリを比較するために使用されます。例えば、バイナリAとバイナリBを考えてみましょう。

    layman用語では。 OR操作|は、A OR Bのビットが設定されているかのように読み取られ、set、つまり1として返されます。

    例:

    10000000 // Value 64 in binary 
    00000001 // Value 1 in binary 
    10000001 // Gives you 65 when you perform | OR operation 
    
    = 65 
    

    XOR操作が少しORように動作しますが、それは2つのビットが、それは代わりにあなた0を返しsameているときである別の特別な能力を持っています。

    例:

    10000001 // Value 65 in binary 
    10000000 // Value 64 in binary 
    00000001 // Gives you 1 when you perform^XOR operation 
    
    = 1 
    

    メモリから、あなたは一般的にのみビットがセットされているかどうかをチェックするためにAND &演算子を使用します。だからあなたはそれにもっと興味があり、shiftの操作もあります。

    関連する問題