簡體   English   中英

如何在C中將unsigned long long轉換為float/int?

[英]How to convert unsigned long long to float/int in C?

unsigned long long 變量的十六進制值為“ 40 36 70 A3 D7 0A 3D 71 ”。 如果我用%f轉換說明符打印它,我會從 IEEE-754 得到正確的轉換。 即使我丟失了一些小數,我如何將此變量轉換為浮動的 one 或int

我試過鑄造它,但它給了我不好的價值。 這里的例子:

unsigned long long hex = 0x403670A3D70A3D71;
float cast_float = (float)hex;

假設unsigned long long變量包含一個有效的double值,那么您可以使用類型 punning ,例如使用聯合:

union
{
    unsigned long long i;
    double             f;
} value = { .i = 0x403670A3D70A3D71 };

printf("0x%llx is %f\n", value.i, value.f);

請注意,只有當整數中的值與系統上有效的雙精度浮點值具有相同的位模式時,這才有效。 否則可能會導致未定義的行為


現在,如果要將其轉換為int22 (因為0x403670A3D70A3D71double22.44的二進制表示),則首先需要使用類型雙關獲取浮點值,然后使用floor函數對其進行截斷轉換為整數值(但仍為浮點類型),最后將其轉換為int

int int_val = (int) floor(value.f);

暫無
暫無

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

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