9

最後にビットとバイト レベルでプログラミングしてから長い時間が経ちました。当時のことを覚えていると思われることを確認したいと思います。

同じ長さの 2 つの整数 (1、2、4、8 バイト; それは問題ではありません) があり、それらを合計するとします。それらが符号付きか符号なしかによって、合計のビットごとの結果が異なりますか。つまり、符号付き整数か符号なし整数かに関係なく、ビットは同じになりますか?

私の直感と虚弱な記憶はそうするだろうと言っていますが、私はただ確認したかっただけです。ありがとう。

4

2 に答える 2

13

実装が符号付き整数の表現として 2 の補数を使用すると仮定すると、結果は同じになります。他の表現では、そうではありません。

編集

コメントで指摘されているように、符号付き加算のオーバーフローは未定義の動作です。つまり、そのような場合の結果については何も言えません。

于 2013-02-19T16:28:01.760 に答える
4

私はこれがすでに答えられていることを知っていますが、私がこれまでに使用したすべてのプロセッサ (約 12 の異なるアーキテクチャ-つまり、さまざまなフレーバーではなくアーキテクチャを意味します) には 1 つのタイプの ADD 命令しかありません-サイズオプションが異なる場合がありますが、それは1つの指示です。引き算も同様です。通常、符号付きと符号なしのバリアントがある乗算と除算では異なります。または、何らかの方法で入力を「符号調整」する必要があります。

符号付きと符号なしを区別する唯一の他の命令は、条件付き命令です。たとえば、"branch on less than" には、"unsigned less than" のバリアントと "signed less than" のバリアントが 1 つあります (そのうちの 1 つは通常呼び出されます)。 「以下」や「キャリーセット」などの「未満」以外のもの)。

于 2013-02-19T16:53:09.023 に答える