私はPythonを使用しているので、Pythonで例を挙げますが、質問はPythonに関するものではありません。 変数を特定の値でインクリメントして、指定された境界にとどまるようにしたいとします。境界内のインクリメントまたはデクリメント
def up (a, s, Bmax):
r = a + s
if r > Bmax : return Bmax
else : return r
def down (a, s, Bmin):
r = a - s
if r < Bmin : return Bmin
else : return r
注:
だからインクリメントとデクリメントのために私は、これらの二つの機能を持っている変数の初期値は「」境界内にすでに存在することを想定しているので(<は< =最大に=分)追加の初期チェックはこの機能に属しません。私が作ったほとんどすべてのプログラムには、これらの機能が必要です。
質問です:
- は、いくつかの典型的な操作として分類されるものであり、彼らの特定の名前を持っていますか?
- はいの場合、固有のプロセッサ機能に対応しているので、一部のコンパイラで最適化されていますか?
私はを尋ねる理由は、もちろん、私はPythonでそれを最適化することができないと私はCPUアーキテクチャについて少し知っている、純粋な好奇心です。ので、それを扱う
def up (a, s, Bmax):
counter = 0
while True:
if counter == s : break
if a == Bmax : break
if a == 255 : break
a += 1
counter += 1
私は後者はPythonでどんな意味がありません知っている:増分は私はこのような仮定になり、符号なし8ビット整数のためのより低いレベルで、より具体的には
値を追加する低レベルのコードを想像する私の素朴な試みです。いくつかのニュアンスがあります。署名された、署名されていないが、私はより頻繁にそれを見つけたので、私は単に符号なしの整数に興味があった。
興味深い質問は、私が掘って、まだ正確な答えを見つけることができませんでした。 http://ptgmedia.pearsoncmg.com/images/0321335724/samplechapter/seacord_ch05.pdfでは、IA-32命令(jcおよびinc)を使用してオーバーフローを検出する方法について説明しています。 GCCでは、-ftrapvを使ってSIGABRTを発行し、ハンドラを登録してオーバーフローをソートすることができます。 –
質問がありますが、明確にするために、加算の結果がUP関数をコーディングした方法で表現できる最大値よりも大きいかどうかを検出することはできません。符号付きintとみなし、現在の値がMAXより小さい1つの0x7FFFFFFEで、2を加算したい場合、オーバーフローし、-2,147,483,648になります。これは、表現できる最大値よりも小さくなります。だからあなたはあなたのUP関数がMAXを返すことを決して見ないでしょう –