5
我一直在尋找通過C++ Integer Overflow and Promotion,試圖複製它,終於結束了這一點:整數推廣,符號/無符號,和printf
#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(這將適合看到2的補碼4294967291是11 ... 11011),但我不是100%相信我沒有忽略任何東西。所以,我是對的還是在這裏發生了其他事情?
這簡直就是UB。將錯誤的類型傳遞給'printf'調用UB。 – 2013-03-26 16:21:37
@ R:是的,我想到了,但我想確保我沒有錯過別的東西。 – rainer 2013-03-26 16:22:34