簡體   English   中英

int用C中的按位運算符浮動

[英]int to float with bitwise operators in C

我正在編寫一個函數,使用位運算符將int轉換為float。 我不明白為什么我的代碼不適用於所有輸入。 例如,它適用於2,19,43等,但它輸出-nan為7,6,13,58,依此類推。 有人可以解釋一下,為什么會這樣? 謝謝。 這是我的代碼:

#include <stdio.h>

typedef union{
    int x;
    float fx;
}df;
int find_e(int x,int i){
    if(x&1<<i) return i;
    if(x==0) return -127;
    return find_e(x,--i);
}
float int_to_float(int x){
    df ime;
    ime.x=0;
    int sign = 0;
    if(x<0){x=-x;sign = 1<<31; }
    int position = find_e(x,31);
    int e = position + 127;
    int m = (x&(~(~0<<position)))<<(32-position);
    ime.x |= sign;
    ime.x |= e<<23;
    ime.x |= m>>9;
    return ime.fx;
}

int main()
{
    int x;
    scanf("%d",&x);
    printf("%f\n", int_to_float(x));
    return 0;
}

我用gcc編譯器。

問題是“m”的類型, int是有符號的,右移是簽名擴展。

ime.x |= m>>9;

將所有不能為負的變量更改為unsigned而不是int

我修好了它並做了一些小改動: 演示

暫無
暫無

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

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