プログラミング言語での演算子の優先順位が実装に依存するのか、それともすべての言語が従う固定規則があるのかを知りたいです。また、可能であれば、優先順位が最も高い次の演算子を最初に注文できますか:AND、OR、NOT、XOR。
5 に答える
グーグルで調べたところ、APLやSmallTalkなどの一部の言語には演算子の優先順位規則がなく、式を左から右/左から右に厳密に評価していることがわかりました。
ただし、ほとんどの言語、特にCから派生した言語では、相対的な優先順位はNOT> XOR>AND>ORです。
式が&&と||を組み合わせると その評価は正しい順序で行う必要があります。括弧は、算術演算の場合と同様に、オペランドを正しい演算子でグループ化するために使用できます。また、算術演算子と同様に、論理演算子には、括弧がない場合に物事をグループ化する方法を決定する優先順位があります。
式では、優先順位が最も高い演算子が最初にそのオペランドでグループ化され、次に最も高い演算子がそのオペランドでグループ化されます。同じ優先順位の論理演算子が複数ある場合は、左から右に調べられます。
プログラマーは、演算子の優先順位だけが機能する場合でも、読みやすくするために括弧を使用してオペランドをグループ化するのが一般的です。
ブールまたはビット単位?決まったルールはありません。ほとんどの言語には同様のルールがありますが、詳細が異なります。言語定義で調べてください。
3つの基本的なブール演算子があります:NOT、AND、OR。A AND NOT B OR NOT A AND B
XORは、またはの単純なバージョンです(A OR NOT B) AND (NOT A OR B)
。したがって、これら3つだけが共通の優先順位を持ちます:NOT>AND>OR。XORは言語での位置が異なりますが、ANDよりも優先順位が高くなく、ORよりも低くないことは確かです。ほとんどの言語(C / C ++ / Javascriptなど)ではANDとORの間にありますが、他の言語(Perlなど)ではXORの優先順位はORと同じです。
(ORはANDとNOTのみを使用して表現できますが、それでも基本的な演算子ですA OR B = NOT(NOT A AND NOT B)
:)
ANDがORよりも優先順位が高いことを証明する明白で簡単な方法は、括弧がある場合とない場合のステートメントの結果を比較することです。
std::cout << std::boolalpha;
std::cout << ( true || false && false ) << std::endl; // gives true
std::cout << ( ( true || false ) && false ) << std::endl; // gives false