我正在研究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
和第二个printf
的输出符合我的预期,它们都打印出了4294967291。然而,第一个printf
打印出了-5。现在,我猜想这是因为printf
将4294967291的无符号值解释为有符号值,得到了-5(这应该是正确的,因为4294967291的二进制补码为11...11011),但我并不百分之百地确定我没有忽略任何问题。所以,我的猜测对吗?还是其他问题?
printf
传递错误的类型会引发未定义行为。 - R.. GitHub STOP HELPING ICE