タグ付けされた質問 「operator-precedence」

演算子の優先順位とは、プログラミング言語の式またはステートメント内で演算子が評価される順序を制御する規則を指します。ソフトウェアシステムでの実行イベントのシーケンスをカバーする[実行順序]とは異なります。


10
演算子としての「AND」と「&&」
開発者がANDandのOR代わりに&&and を使用することを決定したコードベースがあり||ます。 演算子の優先順位(&&前に行くand)に違いがあることを知っていますが、与えられたフレームワーク(正確にはPrestaShop)では、それは明らかに理由ではありません。 どのバージョンを使用していますか?であるandよりもより読みやすいですか&&?または違いはありませんか?

14
なぜx ==(x = y)は(x = y)== xと同じではないのですか?
次の例を検討してください。 class Quirky { public static void main(String[] args) { int x = 1; int y = 3; System.out.println(x == (x = y)); // false x = 1; // reset System.out.println((x = y) == x); // true } } Java言語仕様に、右側(x = y)と比較するために変数の前の値をロードすることを指示する項目があるかどうかはわかりません。 なぜ最初の式はにfalse評価されtrueますが、2番目の式はに評価されますか?私は(x = y)最初に評価されることを期待し、それからそれx自体と比較して(3)戻りtrueます。 この質問は異なっているJava式で部分式の評価順序という点で、xここでは間違いなく「部分式」ではありません。「評価」するのではなく、比較のためにロードする必要があります。質問はJava固有であり、表現はx == (x = y)、一般的に巧妙なインタビューの質問のために作成された、遠くにある非実用的な構成とは異なり、実際のプロジェクトからのものです。これは、比較および置換イディオムの1行の置換であると想定されていました …


1
(1 in [1,0] == True)がFalseと評価されるのはなぜですか?
この質問の答えを見ていたとき、自分の答えが理解できませんでした。 これがどのように解析されるのか、私にはよくわかりません。2番目の例がFalseを返すのはなぜですか? >>> 1 in [1,0] # This is expected True >>> 1 in [1,0] == True # This is strange False >>> (1 in [1,0]) == True # This is what I wanted it to be True >>> 1 in ([1,0] == True) # But it's not just a …

7
短絡論理演算子は必須ですか?そして評価順は?
ANSI規格では、CまたはC ++のいずれかで、論理演算子を短絡させることを義務付けていますか? あなたのコードは短絡されているこれらの演算に依存すべきではないと言っているK&Rの本を思い​​出して混乱しています。誰かが標準のどこで論理演算が常に短絡されていると言われているのか指摘してもらえますか?私は主にC ++に興味がありますが、Cの回答も素晴らしいでしょう。 私はまた、評価順序が厳密に定義されていないことを読んだことを思い出します(どこで思い出せないか)。したがって、コードは依存しないか、式内の関数が特定の順序で実行されると想定しないでください。呼び出されますが、コンパイラーは最も効率的な順序を自由に選択できます。 標準はこの式の評価順序を示していますか? if( functionA() && functionB() && functionC() ) cout<<"Hello world";

5
カンマ付きの三項演算子が真の場合に1つの式しか評価しないのはなぜですか?
私は現在、C ++ Primerという本を使ってC ++を学んでいます。本の演習の1つは次のとおりです。 次の式の意味を説明してください。 someValue ? ++x, ++y : --x, --y 私たちは何を知っていますか?三項演算子はコンマ演算子よりも優先順位が高いことがわかっています。2項演算子を使用すると、これは非常に簡単に理解できましたが、3項演算子を使用すると、少し苦労します。二項演算子で「優先順位が高い」とは、式の前後に優先順位の高い括弧を使用できることを意味し、実行は変更されません。 三項演算子の場合は、次のようにします。 (someValue ? ++x, ++y : --x, --y) コンパイラーがコードをグループ化する方法を理解するのに私を助けない同じコードを効果的にもたらします。 ただし、C ++コンパイラでのテストから、式がコンパイル:されることがわかり、演算子自体が何を表すことができるかわかりません。したがって、コンパイラーは三項演算子を正しく解釈するようです。 次に、2つの方法でプログラムを実行しました。 #include <iostream> int main() { bool someValue = true; int x = 10, y = 10; someValue ? ++x, ++y : --x, --y; std::cout << …


7
Javascript Ternary演算子による演算子の優先順位
このコードの最初の部分(+ =)を三項演算子と組み合わせて頭を抱えているようには見えません。 h.className += h.className ? ' error' : 'error' このコードが機能する方法は次のとおりです。 h.className = h.className + h.className ? ' error' : 'error' しかし、それは私のコンソールにエラーを与えるため、正しくありません。 だから私の質問は、このコードをどのように正しく解釈すべきかということです?

7
C ++でのステートメント順序の強制
決まった順序で実行したいステートメントがいくつかあるとします。最適化レベル2でg ++を使用したいので、一部のステートメントを並べ替えることができます。ステートメントの特定の順序を強制するためにどのツールが必要ですか? 次の例を考えてみましょう。 using Clock = std::chrono::high_resolution_clock; auto t1 = Clock::now(); // Statement 1 foo(); // Statement 2 auto t2 = Clock::now(); // Statement 3 auto elapsedTime = t2 - t1; この例では、ステートメント1〜3が指定された順序で実行されることが重要です。しかし、コンパイラはステートメント2が1と3から独立していると考え、次のようにコードを実行できないのでしょうか。 using Clock=std::chrono::high_resolution_clock; foo(); // Statement 2 auto t1 = Clock::now(); // Statement 1 auto t2 = Clock::now(); // …

4
メソッドチェーンにおけるC ++実行順序
このプログラムの出力: #include <iostream> class c1 { public: c1& meth1(int* ar) { std::cout << "method 1" << std::endl; *ar = 1; return *this; } void meth2(int ar) { std::cout << "method 2:"<< ar << std::endl; } }; int main() { c1 c; int nu = 0; c.meth1(&nu).meth2(nu); } です: method 1 …

3
SQL Serverでの奇妙な操作の問題:-100 / -100 * 10 = 0
実行するSELECT -100/-100*10と結果はになり0ます。 実行するSELECT (-100/-100)*10と結果はになり10ます。 実行するSELECT -100/(-100*10)と結果はになり0ます。 実行するSELECT 100/100*10と結果はになり10ます。 BOLの状態: 式内の2つの演算子の優先順位が同じ場合、それらは式内での位置に基づいて左から右に評価されます。 そして Level Operators 1 ~ (Bitwise NOT) 2 * (Multiplication), / (Division), % (Modulus) 3 + (Positive), - (Negative), + (Addition), + (Concatenation), - (Subtraction), & (Bitwise AND), ^ (Bitwise Exclusive OR), | (Bitwise OR) BOLは間違っていますか、それとも何か不足していますか?そうです-(予想される)の優先順位をオフに投げています。


2
「C ++プログラミング言語」第4版のセクション36.3.6のこのコードには、明確に定義された動作がありますか?
Bjarne StroustrupのC ++プログラミング言語の第4版セクションの36.3.6 STLに似た操作では、次のコードがチェーンの例として使用されています。 void f2() { std::string s = "but I have heard it works even if you don't believe in it" ; s.replace(0, 4, "" ).replace( s.find( "even" ), 4, "only" ) .replace( s.find( " don't" ), 6, "" ); assert( s == "I have heard it works …

1
優先順位とビットマスク操作
(一見)非常に奇妙なケースに遭遇しました。 数2の(テイク0b10()と1とそれをビットマスク0b01) これは0b000に相当するものを生成するはずです。 ただし、ここでシュレーディンガー氏が登場します。 var_dump(0b10 & 0b01); // int(0) var_dump(0b10 & 0b01 == 0); // int(0) var_dump(0b10 & 0b01 != 0); // int(0) ウィスキー。タンゴ。Foxtrot。 確かに、ビット単位の演算子に関しては、私は最も鋭敏ではありません。恐らくどこかに恐ろしく、恐ろしく間違っているのでしょうか。 ただし、Pythonでは: 0b10 & 0b01 == 0 = True 0b10 & 0b01 != 0 = False ...そう?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.