簡體   English   中英

為什么我的浮點值不能正確打印?

[英]Why Isn't My Floating Point Values Printing Properly?

我正在嘗試打印浮點值0x40a00000和0xc0200000。 但是,根據IEEE-754浮點轉換器( https://www.h-schmidt.net/FloatConverter/IEEE754.html ),我打印出的值和正確值完全不同:

我應該根據IEEE轉換器獲得的值:

0x3F800000 = 5.00
0xBF000000 = -2.50

我在運行時得到的值:

float tmp1 = 0x40a00000;
float tmp2 = 0xc0200000;

printf("tmp1 = %.2f\n", tmp1);
printf("tmp2 = %.2f\n", tmp2);

tmp1 = 1084227584.00
tmp2 = 3223322624.00

由於某種原因,我的C代碼沒有按照IEEE標准格式化浮點值的位,而是將它們格式化為好像是帶小數點的int

這些將十六進制數字的浮點數表示形式分配給浮點數。

相反,請執行以下操作:

int i1 = 0x40a00000;
int i2 = 0xc0200000;
float tmp1, tmp2;
memcpy(&tmp1, &i1, sizeof(int));
memcpy(&tmp2, &i2, sizeof(int));

打印它們:

printf("tmp1 = %.2f\n", tmp1);
printf("tmp2 = %.2f\n", tmp2);

輸出:

tmp1 = 5.00
tmp2 = -2.50

完整示例:

#include <stdio.h>
#include <string.h>

int main(void)
{
    int i1 = 0x40a00000;
    int i2 = 0xc0200000;
    float tmp1, tmp2;
    memcpy(&tmp1, &i1, sizeof(int));
    memcpy(&tmp2, &i2, sizeof(int));
    printf("tmp1 = %.2f\n", tmp1);
    printf("tmp2 = %.2f\n", tmp2);
}

這些沒有按照您認為的去做:

float tmp1 = 0x40a00000;
float tmp2 = 0xc0200000;

您只需使用要打印的十進制整數的十六進制表示形式即可; 它們不會將這些字節推入,因此可以將它們解釋為浮點數。

聽起來您想要做的是(以某種方式)在某個地方獲取想要的字節,獲取其地址,並將其強制轉換為指向浮點數的指針,在取消引用時將其解釋為浮點數。

union
{
   int i;
   float f;
}k1,k2;

k1.i = 0x40a00000;
k2.i = 0xc0200000;

printf("f1 = %.2f\n", k1.f);
printf("f2 = %.2f\n", k2.f);
int i1 = 0x40a00000;
int i2 = 0xc0200000;

float f1 = *(float*)&i1;
float f2 = *(float*)&i2;

printf("f1 = %.2f\n", f1);
printf("f2 = %.2f\n", f2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM