Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 转换一个整数';使二进制数据浮动_C++_Floating Point - Fatal编程技术网

C++ 转换一个整数';使二进制数据浮动

C++ 转换一个整数';使二进制数据浮动,c++,floating-point,C++,Floating Point,假设我有一个整数: 无符号长整型数据=459933101119547059; 现在我想把这个数据转换成双精度的。我基本上想更改类型,但保持位的原样。对于给定示例,浮点值为0.31415926536 如何在C++中实现这一点?我看到一些使用Union的方法,但许多人建议不要使用这种方法。您可以使用重新解释\u cast: float f = reinterpret_cast<float&>(data); std::bit_cast<double>(data)

假设我有一个整数:

无符号长整型数据=459933101119547059;
现在我想把这个数据转换成双精度的。我基本上想更改类型,但保持位的原样。对于给定示例,浮点值为
0.31415926536


如何在C++中实现这一点?我看到一些使用Union的方法,但许多人建议不要使用这种方法。

您可以使用
重新解释\u cast

float f = reinterpret_cast<float&>(data);
std::bit_cast<double>(data)
float f=重新解释铸件(数据);

为了你的价值,我没有得到0.314。。。但这就是你可以做到的。

你可以使用
重新解释cast

float f = reinterpret_cast<float&>(data);
std::bit_cast<double>(data)
float f=重新解释铸件(数据);

为了你的价值,我没有得到0.314。。。但是这就是你能做到的。< /P> < P>从它的面值看问题(假设你有一个正当的理由这样做),这是当前C++标准中唯一的正确方法:

int i = get_int(); 
float x;
static_assert(sizeof(float) == sizeof(int), "!!!");
memcpy(&x, &i, sizeof(x));

从表面上看问题(假设你有一个正当的理由这样做),这是当前C++标准中唯一的正确方法:

int i = get_int(); 
float x;
static_assert(sizeof(float) == sizeof(int), "!!!");
memcpy(&x, &i, sizeof(x));

从C++20开始,您可以使用
std::bit\u cast

float f = reinterpret_cast<float&>(data);
std::bit_cast<double>(data)

请注意,结果将根据浮点表示(IEEE-754是普遍存在的)以及浮点和整数类型是否具有相同的endianness而有所不同。

自C++20以来,您可以使用
std::bit\u cast

float f = reinterpret_cast<float&>(data);
std::bit_cast<double>(data)

请注意,结果将根据浮点表示(IEEE-754是普遍存在的)以及浮点和整数类型是否具有相同的endianness而有所不同。

为什么要这样做?您在这里试图实现的更大目标是什么?@scohe001从文件中读取浮点数。首先,数据转换为int,如果需要,这个int需要转换为float。为什么要这样做?您在这里试图实现的更大目标是什么?@scohe001从文件中读取浮点数。首先,数据被转换成整数,如果需要,这个整数需要转换成浮点。欢迎来到未定义的行为世界,在那里一切都是可能的,没有什么是确定的@SergeyA reinterpret_cast不是未定义的。@n.m.该cast不是未定义的,但通过引用访问不存在的
float
对象是UB。@n.m.cast定义良好。不允许访问浮动。诚然,答案中的代码不访问浮点,但在问题的上下文中,可以合理地假设以后会访问。欢迎来到未定义行为领域,在这里一切都是可能的,没有什么是确定的@SergeyA reinterpret_cast不是未定义的。@n.m.该cast不是未定义的,但通过引用访问不存在的
float
对象是UB。@n.m.cast定义良好。不允许访问浮动。诚然,答案中的代码不访问float,但在问题的上下文中,可以合理地假设稍后会访问。