私はC++整数のオーバーフローとプロモーションを調べていて、それを複製しようとしましたが、最終的には次のようになりました。
#include <iostream>
#include <stdio.h>
using namespace std;
int main() {
int i = -15;
unsigned int j = 10;
cout << i+j << endl; // 4294967291
printf("%d\n", i+j); // -5 (!)
printf("%u\n", i+j); // 4294967291
return 0;
}
上記cout
の投稿を読んだ後、私が期待したことを実行します。2番目の投稿も同様printf
です。どちらも4294967291を印刷printf
します。ただし、最初の投稿は-5を印刷します。さて、これはprintf
単に4294967291の符号なしの値を符号付きの値として解釈し、最終的に-5になると思います(4294967291の2の補数が11 ... 11011であることがわかります)が、私は100ではありません%私は何も見逃していないと確信しました。それで、私は正しいですか、それともここで何か他のことが起こっていますか?