C++ で負の値を表す

Mohd Mohtashim Nawaz 2023年10月12日
  1. C++ で負の値を表すメソッド
  2. C++ でビットシフトを使用した最大振幅の負の整数
  3. まとめ
C++ で負の値を表す

C++ は、正の値と負の値を表すことができます。この記事では、C++ が負の値を表す方法について説明します。

C++ で負の値を表すメソッド

C++ で負の値を表すための規則はありません。したがって、ベンダーは、C++ で負の値を表すための実装の詳細を選択できます。

ただし、負の数を表すための 3つの一般的な方法があります。

  1. 符号付きの大きさ-符号付きの数値を表すために最も使用されていない方法。この方法では、数値の符号を表すために特別なビットが固定されています。

    残りのビットは、数値の大きさを表します。ただし、この方法は、特に負の数に対して算術演算を実行する場合に、コンピューターに実装すると深刻な問題が発生します。

  2. 1 の補数-この方法では、負の数は、対応する正の数のビット表現から 0 ビットを 1 に、またはその逆に変換することによって表されます。

    左端のビットは数値の符号を表すことに注意してください。0 は正の符号を表し、1 は負の符号を表します。

    ただし、この方法には、この方法を使用しているときに+0 と-0 の 2つの異なる表現があるという欠点があります。

  3. 2 の補数-これは、負の数を表す最もよく使用される方法です。この方法では、符号を表すために符号ビットが固定されています。

    負の数が検出された場合、そのビット表現が計算されます。その後、ビットが反転され、1 が追加されます。

    例を見てみましょう。

    Number: -6
    Sign: -ve so sign bit = 1
    Bitwise representation of 6: 000110
    Two's complement: 111001+1 = 111010
    So the number is represented as 1111010
    

この方法は、1 の補数法の欠点を克服します。

C++ でビットシフトを使用した最大振幅の負の整数

符号ビットを除くすべてのビットが 1 になるようにビットをシフトすることにより、整数データ型の最大値を取得できます。

8 ビット整数表現があります(たとえばのみ)。-1 の表現は次のとおりです。

Number: -1
Sign: -ve so sign bit = 1
Bitwise representation of 1: 000 0001
Two's complement: 111 1110 + 1 = 111 1111
So -1 is represented as 1111 1111.

-1 を 1 桁左シフトすると、そのバイナリ表現は 0111 1111 になります。

これは最大数を表します。ビットを逆にするだけで、最小の負の数(最小値)を取得できます。

コードを見てみましょう。

#include <iostream>

using namespace std;

int getLargest() {
  int num = -1u >> 1;
  return num;
}

int getSmallest() {
  int num = -1u >> 1;
  num = ~num;

  return num;
}

int main() {
  cout << "Maximum value: " << getLargest() << endl;
  cout << "Minimum value:" << getSmallest() << endl;
  return 0;
}

出力:

Maximum value: 2147483647
Minimum value:-2147483648

まとめ

整数の最大値と最小値は、C++ コンパイラのベンダーとマシンによって異なる場合があることに注意する必要があります。この記事の例は、整数の 32 ビット表現の結果を示しています。

関連記事 - C++ Number