1. ホーム
  2. c++

[解決済み] 符号なし変数に負の値を代入するとどうなりますか?

2023-04-18 18:37:47

質問

符号なし変数に負の値を代入するとどうなるのか知りたかったのです。

コードはなんとなくこんな感じでしょうか。

unsigned int nVal = 0;
nVal = -5;

コンパイルエラーは出ませんでした。プログラムを実行すると nVal には奇妙な値が割り当てられていました。もしかして、2進数の補数値が nVal ?

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

公式の回答はこちら - 4.7 節 conv.integral

<ブロッククオート

"出力型がunsignedの場合、結果の値は出力元の整数に一致する最小のunsigned整数(modulo 2 n ここで n は符号なし型を表現するために使用されるビット数です)。[注:2の補数表現では、この変換は概念的なものであり、ビットパターンに変化はありません(切り捨てがない場合)。-注を終了する ]。

これは本質的に、基礎となるアーキテクチャが 2 の補数ではない方法(符号付きマグニチュードや 1 の補数など)で保存する場合、符号なしへの変換は 2 の補数であるかのように動作しなければならないことを意味します。