#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 returns int value,but ~uint64_t returns uint64_t .
Is this undefined behaviour ?
Posting from en.cppreference
The result of
operator~is the bitwise NOT (one's complement) value of the argument (after promotion).
Integral promotion is applied to char, short int etc (types narrower than int) and the result needs to be casted to destination type if destination is not int.
This is the reason for sizeof(~b) == sizeof(int) in your case.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With