回答:
&
and &&
演算子と同様に、double演算子は「短絡」演算子です。
例えば:
if(condition1 || condition2 || condition3)
condition1がtrueの場合、条件2および3はチェックされません。
if(condition1 | condition2 | condition3)
これにより、1がすでに真である場合でも、条件2および3がチェックされます。条件は非常に高価な関数になる可能性があるため、これらを使用することでパフォーマンスを向上させることができます。
1つの大きな警告、NullReferencesまたは同様の問題があります。例えば:
if(class != null && class.someVar < 20)
クラスがnullの場合、ifステートメントclass != null
はfalseの後で停止します。&だけを使用すると、チェックが試行されclass.someVar
、素晴らしい結果が得られますNullReferenceException
。Or-Operatorを使用すると、何か悪いことを引き起こしたりする可能性は低いので、それほどトラップにはなりませんが、覚えておく必要があります。
ただし、各条件が実行する必要のある関数である設計がない限り、誰も単一&
または|
演算子を使用しません。デザインのにおいのように聞こえるかもしれませんが、(まれに)何かを行うためのクリーンな方法です。&
オペレータは一方で、「これらの3つの機能を実行し、そのうちの一つがfalseを返した場合、elseブロックを実行し、」ん|
「のみなし戻りfalseの場合、他のブロックを実行する」ん-役立つことができますが、言ったように、多くの場合、それはデザインですにおい。
|
and &
演算子の2番目の使用法があります:ビット演算。
&
と|
条件演算子としてはハックです、と彼らはこれまでC / C ++を使用する必要があればトラブルにそれらを取得します: 1 && 2
真しばらくはされて1 & 2
falseです。
&
それがほとんど常に意味するもの以外の意味を伝えるために使用しています:ビットごと)。
|| 論理OR演算子です。それが何であるかを基本的に知っているように思えます。if、whileなどの条件ステートメントで使用されます。
condition1 || condition2
condition1 OR condition2のいずれかがtrueの場合、trueと評価されます。
| ビットごとのOR演算子です。2つの数値の演算に使用されます。各数値の各ビットを個別に見て、ビットの1つが少なくとも1つの数値で1である場合、結果のビットも1になります。以下にいくつかの例を示します。
A = 01010101
B = 10101010
A | B = 11111111
A = 00000001
B = 00010000
A | B = 00010001
A = 10001011
B = 00101100
A | B = 10101111
うまくいけば、それは理にかなっています。
したがって、最後の2つの質問に答えるために、「2つの演算子の違いを知る」以外に注意点があるとは言いません。完全に異なる2つのことを行うため、互換性はありません。
1つは「ビット単位のOR」です。
10011b | 01000b => 11011b
もう1つはロジックまたはです。
trueまたはfalse => true
|
bool
短絡することなくタイプにも使用できます。
良い質問。これら2つの演算子は、PHPとC#で同じように機能します。
|
ビットごとのORです。2つの値をビットで比較します。例:1101 | 0010 =1111。これはビットオプションを使用する場合に非常に便利です。たとえば、読み取り= 01(0X01)書き込み= 10(0X02)読み取り/書き込み= 11(0X03)。有用な例の1つは、ファイルを開くことです。簡単な例は次のとおりです。
File.Open(FileAccess.Read | FileAccess.Write); //Gives read/write access to the file
||
論理ORです。これは、ほとんどの人がORを考え、真実に基づいて2つの値を比較する方法です。例えば、私は店に行くか、私はモールに行きます。これは、コードで最も頻繁に使用されるものです。例えば:
if(Name == "Admin" || Name == "Developer") { //allow access } //checks if name equals Admin OR Name equals Developer
PHPリソース:http : //us3.php.net/language.operators.bitwise
C#のリソース:http : //msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx
|
では論理値またはブール値に適用されます。リンクされた参照状態として。実際には、最終的な結果はビット単位の演算子であるかのように同じです。なぜなら、ビット単位のtrue
とのビット単位の値は、ビット単位のORの値が論理OR とfalse
まったく同じ結果を生成するからです。つまり(int)(bool1 | bool2)
== ((int)bool1) | ((int)bool2)
です。
Javaの簡単な例
public class Driver {
static int x;
static int y;
public static void main(String[] args)
throws Exception {
System.out.println("using double pipe");
if(setX() || setY())
{System.out.println("x = "+x);
System.out.println("y = "+y);
}
System.out.println("using single pipe");
if(setX() | setY())
{System.out.println("x = "+x);
System.out.println("y = "+y);
}
}
static boolean setX(){
x=5;
return true;
}
static boolean setY(){
y=5;
return true;
}
}
出力:
using double pipe
x = 5
y = 0
using single pipe
x = 5
y = 5
&-(条件1&条件2):最初のケースがfalseの場合でも両方のケースをチェックします
&&-(条件1 &&条件2):ケース1がfalseの場合、2番目のケースをチェックする必要はありません
&&-演算子は、コードをより速く専門的に実行し、ほとんど使用されません。
| -(条件1 |条件2):ケース1がtrueの場合でも両方のケースをチェックします
|| -(条件1 ||条件2):最初のケースがtrueの場合、2番目のケースをチェックする必要はありません
|| -オペレーターはコードをより速く専門的に実行します| めったに使用されません
rarely used
?すべてはあなたが何をしたいか、何をする必要があるかによります。
| ||演算子は、2つのオペランドのビット単位のORを実行します(つまり、両側がfalseを返すためには、両側がfalseと評価される必要があります)。演算子は、必要な場合にのみ2番目の演算子を評価します。
http://msdn.microsoft.com/en-us/library/kxszd0kx(VS.71).aspx
http://msdn.microsoft.com/en-us/library/6373h346(VS.71).aspx
単一のパイプ "|" 「ビット単位」であり、何をしているのかがわかっている場合にのみ使用してください。二重パイプ "||" 論理ORであり、「x == 0 || x == 1」のような論理ステートメントで使用できます。
次に、ビット単位または何をするかの例を示します。a= 0101およびb = 0011の場合、a | b = 0111です。0以外をtrueとして処理するロジックシステムを処理している場合、ビットごとのorは論理的orと同じように動作しますが、対応するもの(ビットごとの「&」)は動作しません。また、ビット単位または短絡評価を実行しません。
bool
短絡のないタイプにも使用できます。