ich durch C++ Integer Overflow and Promotion suchen, versuchte es zu replizieren, und schließlich mit dieser endete:Integer Förderung, mit/ohne Vorzeichen, und 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;
}
Die cout
tut, was ich erwartet hatte, nachdem die Post oben genannten Lesen, wie auch die zweite printf
: beide 4294967291 drucken. Die erste printf
druckt jedoch -5. Nun, meine Vermutung ist, dass dies printf
einfach interpretiert den vorzeichenlosen Wert von 4294967291 als vorzeichenbehafteten Wert, am Ende mit -5 (was würde passen sehen, dass die Zweierkomplement von 4294967291 ist 11 ... 11011), aber ich bin nicht 100% überzeugt, dass ich nichts übersehen habe. Also, habe ich recht oder passiert hier noch etwas?
Dies ist einfach UB. Übergeben Sie den falschen Typ an 'printf', wird UB aufgerufen. –
@R ..: Ja, das habe ich mir gedacht, aber ich wollte sichergehen, dass ich nicht noch etwas anderes vermisse. – rainer