#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。
这是未定义的行为吗?
答案 0 :(得分:6)
operator~
的结果是按位NOT(一个补码)值 参数(促销后)。
Integral promotion适用于char
,short int
等(类型比int
更窄),如果目标不是{{1,则需要将结果转换为目标类型}}
这就是int
的原因。