我正在查看C++ Integer Overflow 和 Promotion,试图复制它,最后得到了这个:
#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
阅读了上面提到的帖子后,我的预期是这样的,第二个也是如此printf
:两者都打印 4294967291。printf
但是,第一个打印 -5。现在,我的猜测是,这printf
只是将 4294967291 的无符号值解释为有符号值,以 -5 结尾(这适合看到 4294967291 的 2 补码是 11...11011),但我不是 100 % 确信我没有忽略任何事情。那么,我是对的还是这里发生了其他事情?