gpt4 book ai didi

c++ - uint "representation"的内联 float 不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 05:15:50 25 4
gpt4 key购买 nike

这是用 C 语言编写的,但我将其标记为 C++,以防它们相同。这是建立在: Microsoft (R) 32 位 C/C++ 优化编译器版本 14.00.50727.220 for 80x86如果这有什么不同的话

为什么会这样?

(inVal 为 0x80)

float flt = (float) inVal;
outVal = *((unsigned long*)&flt);

(导致 outVal 为 0x43000000——正确)

但这不是吗?

outVal = *((unsigned long*)&((float)inVal));

(导致 outVal 为 0x00000080——不正确 :( )

在问这个问题之前,我用谷歌搜索了一下,发现 this function在 java 中,基本上做我想做的。如果您对我正在尝试做的事情感到有点困惑,这个程序可能有助于解释它:

class hello
{
public static void main(String[] args)
{
int inside = Float.floatToIntBits(128.0f);
System.out.printf("0x%08X", inside);
}
}

最佳答案

您正在尝试获取非常量临时地址((float) 转换的结果)——这在 C++ 中是非法的(可能在 C 中也是如此)。因此,您的代码会产生垃圾。

在您的第一个工作代码中,您没有使用临时代码,因此您的代码可以正常工作。请注意,从标准的角度来看,这仍然是错误定义的,因为未指定所涉及类型的大小和内部表示,并且可能因平台和编译器而异。不过,你可能很安全。

关于c++ - uint "representation"的内联 float 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1031896/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com