reinterpret_cast of signed int reference

Luk*_*řík 1 c++ integer reinterpret-cast

为什么结果4294967292而不是-4两个整数类型都被签名?

#include <iostream>

void f(int & i)
{
    i = -4;
}

int main()
{
    long long i = 0;
    f(reinterpret_cast<int &>(i));
    std::cout << i << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Log*_*uff 6

long longint您的架构似乎是64位和32位数字.你正在使用32位整数引用,所以你只修改了不太重要的一半(你显然是在普通的x86机器上编译,它使用小端和2的补码来表示有符号整数).

符号位以及更重要的一半都是0s(初始化).必须是1s来打印相同的负值:

0000 0000 0000 0000 0000 0000 0000 0000 1111 1111 1111 1111 1111 1111 1111 1100
^                                       ^
sign bit of long long                   sign bit of int
Run Code Online (Sandbox Code Playgroud)

reinterpret_cast只保证你int和另一个人一起回来reinterpret_cast,所以要么打印出来int,要么使用long long &参数.

  • ..和-4和4294967292具有相同的二进制表示..只是指出它. (3认同)