次のループが各繰り返しで0を印刷する理由を理解するのに苦労しています。C#forループとポストインクリメント
for (int i = 0, j = 0; i < 10; i++)
{
Console.WriteLine(j += j++);
}
各繰り返しの後にjの値を大きくしないでください。あなたが説明してくださいできない場合は?
@Jon Skeetから肯定的なフィードバックを得た後、私はステートメントの分解を行い、コードがどのように低レベルで動作しているかを知ることができました。私は私のコメントに逆アセンブリを追加しました。
ありがとうございました!
54: Console.WriteLine(j += j++);
0000004f mov eax,dword ptr [ebp-40h] /* [ebp-40h] == 0 move to eax */
00000052 mov dword ptr [ebp-48h],eax /* eax == 0 move to [ebp-48h] */
00000055 mov eax,dword ptr [ebp-40h] /* [ebp-40h] move to eax == 0 */
00000058 mov dword ptr [ebp-4Ch],eax /* eax move to [ebp-4Ch] == 0 */
0000005b inc dword ptr [ebp-40h] /* increment [ebp-40h]== 1*/
0000005e mov eax,dword ptr [ebp-48h] /* [ebp-48h] move to eax == 0 */
00000061 add eax,dword ptr [ebp-4Ch] /* (eax == 0 + [ebp-4Ch]) eax == 0 */
00000064 mov dword ptr [ebp-40h],eax /* eax == 0 move to [ebp-40h] */
00000067 mov ecx,dword ptr [ebp-40h] /* [ebp-40h] move to ecx == 0 */
0000006a call 71DF1E00 /* System.Console.WriteLine */
0000006f nop
55: }
@Rabid Penguin私はこれがRobert Sedgewick/Kevin Wayneのイントロプログラミングブックからの演習であると述べています。私は増分の前後の仕方を理解しています。私の目的は、各繰り返しでループが0を印刷した理由を理解することです。 – dcrearer