0

プリミティブ操作を見つけるためのコードがたくさんあります。問題は、このテーマに関する詳細なリソースが Web 上にあまりないことです。このループでは:

for i:=0 to n do
  print test
end

実際にはいくつのステップがありますか? 私の最初の推測では、n 回のループと 1 の印刷を考慮すると、n+1 と言うでしょう。それから、私は十分に正確ではないかもしれないと思いました。ループごとに i に 1 を足す操作すらありませんか? その場合、n+n+1=2n+1 となります。あれは正しいですか?

4

1 に答える 1

4

ループは、次のように再キャストすることで、「プリミティブ操作」に分解できますwhile

int i = 0;
while (i < n)
{
    print test;
    i = i + 1;
}

または、より明示的に:

loop:
    if (i < n) goto done
    print test
    i = i + 1
    goto loop
done:

次に、反復ごとに、比較、インクリメント、およびgoto. それは単なるループオーバーヘッドです。ループ内で行われる作業をすべて追加する必要があります。が「プリミティブ操作」と見なされる場合、次のprintようになります。

  • n+1 回の比較
  • n回の呼び出しprint
  • n インクリメント
  • n+1goto命令 (完了時にループから分岐する命令)

これらすべてがどのようにマシン コードに変換されるかは、コンパイラ、ランタイム ライブラリ、オペレーティング システム、およびターゲット ハードウェアに大きく依存します。そしておそらく他のこと。

于 2011-02-21T19:47:39.993 に答える