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)
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 &参数.
| 归档时间: |
|
| 查看次数: |
363 次 |
| 最近记录: |