問題タブ [pre-increment]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 同じステートメントでプレインクリメントとポストインクリメントを使用するとどうなりますか?
今日、ポストインクリメントとプリインクリメントに関する興味深いステートメントを見てきました。次のプログラムを検討してください-
その興味深い声明で実際に何が起こっているのでしょうか? ポストインクリメントは、ステートメントが完了した後に x の値を増やすことになっています。次に、そのステートメントの最初の xの値は 5 のままです。また、プレインクリメントの場合、2 番目の xの値は6 または 7 にする必要があります (不明)。
z に 0 の値を与えるのはなぜですか? 5 - 5でしたか、それとも6 - 6でしたか? 説明してください。
c - 単項演算は時々自殺行為です.Cコードを台無しにします
C 言語でのコード。
私の質問はなぜですかi
: 392
? 私によると、出力は336
. (なぜなら6 * 7 * 8 = 336
)
私はここで本当に台無しですか??
c - インクリメント オペレータ プロファイリングの前後の結果
C でプリ インクリメント オペレーターとポスト インクリメント オペレーターのプロファイリングを行ったところ (マイクロ最適化の目的ではなく、好奇心から!)、いくつかの驚くべき結果が得られました。ポスト インクリメント オペレータの方が遅いと思っていましたが、すべてのテストで (自明ではない) 高速であることが示されました。-S
gcc でフラグを使用して生成されたアセンブリ コードを調べたところ、 post には 1 つの余分な命令があります (予想どおり)。誰でもこれを説明できますか?Arch Linux で gcc 4.8.1 を使用しています。
これが私のコードです。
編集: コードに整数オーバーフロー エラーがあります。質問には影響しませんが、実際の反復回数は渡された引数とは異なることに注意してください。
Post.c:
Pre.c:
結果は次のとおりです。
少し前にタイミングスクリプトも書きました。同じ結果が得られた実行:
出力はほとんど自明ですが、アイデアは、両方のプログラムを 10 回 (デフォルトで) 実行し、結果の平均と標準偏差をミリ秒単位で計算することです。
post.cおよびpre.c用に gcc によって生成されたアセンブリ コードをペーストビンに含めました。
この議論を再び持ち出して申し訳ありませんが、これらの数字は私には奇妙に思えます。
java - Java: 前置、後置演算子の優先順位
Java の演算子の優先順位について 2 つの同様の質問があります。
最初の1つ:
Oracle のチュートリアルによると:
後置 (expr++, expr--) 演算子は前置 (++expr, --expr) よりも優先順位が高い
したがって、評価順序は次のようになります。
しかし、Java は PRE/POST の順序付けを無視して、それらを 1 つのレベルに置いているようです。したがって、実際の順序は次のとおりです。
答えが (10 * 12 * 12) = 1440 になる理由.
二つ目:
受け入れられた回答の一部:「割り当ての時点までに、(優先順位のために) to++
の値が既にインクリメントされているため、そのインクリメントされた値を上書きします。」a
2
=
では、順を追って見ていきましょう。
すべて問題ないようです。しかし、そのコードを少し変更してみましょう (「=」を「+=」に置き換えます)。
手順 1 ~ 4 は上記と同じです。したがって、ステップ 4 の後は次のようになります。
どこa==2
そして、私は考えます:OK、a = 2+3
そうa
あるべきです5
。しかし、答えはただ4
私は本当に混乱しています。私はすでに数時間を費やしましたが、どこが間違っているのかまだ理解できません。
PS私は、この「スタイル」を実際のアプリケーションで使用すべきではないことを知っています。自分の考えの何が間違っているのかを理解したいだけです。
c++ - プレインクリメントとポストインクリメント
最近、ポストインクリメントとプリインクリメントがどのように機能するかを理解しようとしてきましたが、考えすぎてしまいました。
「製品」は1回の繰り返しで25になりますか?
そして、「商」は 1 回の繰り返しで 5/6 になりますか?
c - if ステートメントで式 a==--a true が使用されるのはなぜですか?
2 番目の if ステートメントが true なのはなぜですか?
出力: TRUE 1 TRUE 2
同じ変数を減分された値と比較しているため、これは未定義の動作が原因で発生していますか?