1. ホーム
  2. c++

[解決済み] 0と-0を区別することは可能ですか?

2023-02-17 16:13:59

質問

整数値 0-0 は基本的に同じです。 しかし、それらを区別することが可能かどうか、私は疑問に思っています。

例えば、ある変数に割り当てられた -0 ?

bool IsNegative(int num)
{
    // How ?
}

int num = -0;
int additinon = 5;

num += (IsNegative(num)) ? -addition : addition;

値は -0 と全く同じようにメモリに保存されるのでしょうか? 0 ?

どのように解決するのですか?

対象となるマシンによります。

を使うマシンでは 2 の補数表現 を使うマシンでは、整数の場合は ビットレベルでの違いはありません。 の間にあります。 0-0 (これらは同じ表現です)

もしあなたのマシンが の補数 を使うなら、間違いなく

0000 0000   -> signed   0 
1111 1111   -> signed   −0

明らかに、私たちは ネイティブサポート x86 シリーズのプロセッサーは、符号付き数値の 2 の補数表現をネイティブにサポートしています。他の表現を使用することは確かに可能ですが、おそらく効率が悪くなり、より多くの命令が必要になるでしょう。

(JerryCoffin も指摘しているように、たとえ 1 の補数が歴史的な理由のためにほとんど考慮されてきたとしてもです。 符号付きマグニチュード表現 はまだかなり一般的で、負と正のゼロに対して別々の表現を持っています)。