#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适用于charshort int等(类型比int窄的类型),并且如果目标不是int,则需要将结果强制转换为目标类型。

这就是您使用sizeof(~b) == sizeof(int)的原因。

关于C++为什么在uint64_t和uint8_t上按位运算符〜返回不同的类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39144352/

10-11 21:53