#include <stdio.h>
#include <iostream>
int main()
{
using namespace std;
uint64_t a = 3;
if (uint64_t(~a) == (~a))
cout << "right" << endl;//right
else
cout << "wrong" << endl;
cout << sizeof(~a) << endl;//8
uint8_t b = 3;
if (uint8_t(~b) == (~b))
cout << "right" << endl;
else
cout << "wrong" << endl;//wrong
cout << sizeof(~b) << endl;//4
getchar();
return 0;
}
~ uint8_t int मान देता है, लेकिन ~ uint64_t uint64_t देता है।सी ++ uint64_t पर bitwise ऑपरेटर ~ और uint8_t विभिन्न प्रकारों को वापस क्यों करें?
क्या यह अपरिभाषित व्यवहार है?
आपको पूर्णांक पदोन्नति नियमों को देखने की आवश्यकता है। – NathanOliver
यह परिभाषित व्यवहार है, सभी अंकगणितीय ऑपरेटरों ('~' सहित) ऑपरेटरों को 'int' को बढ़ावा देते हैं यदि वे' int' से संक्षिप्त प्रकार हैं। यह सी के शुरुआती दिनों से आता है जब गणित में अंकगणित किया गया था और वे रजिस्टर की तुलना में छोटी इकाइयों पर अंकगणित अनुकरण करके इसे अधिक जटिल बनाना नहीं चाहते थे। –