#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 zwraca wartość int, ale ~ uint64_t zwraca uint64_t.C++ Dlaczego operatory bitowe ~ na uint64_t i uint8_t zwracają różne typy?
Czy to niezdefiniowane zachowanie?
Musisz przejrzeć ogólne zasady promocji. – NathanOliver
jest to zdefiniowane zachowanie, wszystkie operatory arytmetyczne (w tym '~') promują operandy do 'int', jeśli są węższym typem niż' int'. Pochodzi z wczesnych dni C, kiedy arytmetyczna była wykonywana w rejestrach i nie chcieli jej komplikować poprzez symulowanie arytmetyki na mniejszych jednostkach niż rejestr. –