繁体   English   中英

C ++为什么uint64_t和uint8_t上的按位运算符〜会返回不同的类型?

[英]C++ Why bitwise operator ~ on uint64_t and uint8_t return different types?

#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发布

operator~的结果是参数的按位NOT(一个补码)值( 提升后 )。

整数提升应用于charshort int等(类型比int更窄),如果destination不是int ,则结果需要转换为目标类型。

这就是你的情况下sizeof(~b) == sizeof(int)的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM