#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。
这是未定义的行为吗?
最佳答案
从en.cppreference发布
Integral promotion适用于char
,short int
等(类型比int
窄的类型),并且如果目标不是int
,则需要将结果强制转换为目标类型。
这就是您使用sizeof(~b) == sizeof(int)
的原因。
关于C++为什么在uint64_t和uint8_t上按位运算符〜返回不同的类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39144352/