#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