reinterpret_cast已签名的 int 引用
reinterpret_cast of signed int reference
为什么即使两个整数类型都有符号,结果也会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;
}
long long
在您的架构上似乎是 64 位和 int
32 位数字。您使用的是 32 位整数引用,因此您只修改了不太重要的一半(您显然是在普通的 x86 机器上进行编译,该机器使用小端序和 two 补码进行有符号整数表示)。
符号位以及更重要的一半都0
s(初始化时)。打印相同的负值必须1
s:
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
reinterpret_cast
只保证你用另一个reinterpret_cast
取回你的int
,所以你要么把它打印为int
,要么使用long long &
参数。
相关文章:
- 如何将 int 引用安全地转换为长引用?
- 运行时错误:引用绑定到类型为"int"的空指针
- 运行时错误:引用绑定到类型"int"的未对齐地址0xbebebebebebebec6,这需要 4 个字节对齐 (stl_vector.h)
- 为什么这个函数可以返回C++int引用
- 创建<int>对整数数组指针的矢量引用 (C++)
- 对'cv::VideoCapture::VideoCapture(int)的未定义引用
- 函数 LNK2019 "int __cdecl __scrt_common_main_seh(void)" 中引用的未解析外部符号主错误 (?__scrt_common_main_seh@@YAHXZ
- for 循环说 - 错误 成员引用基类型"int [13]"不是结构或联合
- 引用数据的 int 指针
- 引用函数如何"int &foo();"工作?
- 编译Qt项目给出了对运算符delete(void*,unsigned int)的未定义引用
- 从emxArray_uint8_T检测到错误:.text+0xc1):未定义对"emxInit_uint8_T1(emxArray_uint8_T**, int)"的引用?
- 是否可以有一个包含int值和int引用的数组
- 返回常量 int* 与返回常量 int* 引用
- 构造函数中的 const int 引用是否可以安全地绑定到文本
- reinterpret_cast已签名的 int 引用
- 在模板中将char转换为int引用
- 如何使用swig将unsigned int引用从python传递到c++
- 与MSVC 2015比较bool和int引用时发出警告
- 数据成员int引用