मैं 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
है: दोनों प्रिंट 42 9 4 9 672 9 1। पहले printf
, हालांकि, प्रिंट -5। अब, मेरा अनुमान है कि यह printf
है जो हस्ताक्षर किए गए मान के रूप में 42 9 4 9 672 9 1 के हस्ताक्षरित मूल्य को आसानी से व्याख्या करता है, -5 के साथ समाप्त होता है (जो यह देखकर फिट होगा कि 42 9 4 9 672 9 1 का पूरक 2 11 ... 11011 है), लेकिन मैं नहीं हूं 100% आश्वस्त है कि मैंने कुछ भी नजरअंदाज नहीं किया है। तो, क्या मैं सही हूं या यहां कुछ और हो रहा है?
यह बस यूबी है। गलत प्रकार को 'printf' में पास करने से यूबी को आमंत्रित किया जाता है। –
@ आर ..: हाँ, मुझे लगा कि, लेकिन मैं यह सुनिश्चित करना चाहता था कि मुझे कुछ और याद नहीं आया। – rainer