这两种转换方式有什么区别?

问题描述 投票:0回答:1

我有以下代码(从浮点数转换为十六进制数):

float decimal = 12.1;
int num = (int) decimal;        // <- (Method 1)
int num2 = (*(int*) &decimal); //  <- (Method 2)

cout << hex << num << "\n";
cout << hex << num2 << "\n";

结果:
0xc
0x4141999a

第二个以十六进制输出正确的浮点数。

我有两个问题:

  • 这两种方式有什么区别?
  • 第二种方式的转换机制是如何工作的?
c++ type-conversion hex
1个回答
0
投票
  1. 方法1

    int num = (int) decimal;
    

    在方法 1 中,您对十进制数执行

    floor()
    。所以结果是 12。

  2. 方法2

     int num2 = (*(int*) &decimal);
    

    在方法 2 中,您获取 32 位十进制数并将其作为整数打印。所以你会得到一个你认为的奇怪的数字,它只是十六进制的浮点数

© www.soinside.com 2019 - 2024. All rights reserved.