全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:863
推到 Plurk!
推到 Facebook!

用Union填入浮點數的bits

尚未結案
ricel
一般會員


發表:6
回覆:6
積分:2
註冊:2005-03-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-27 23:08:31 IP:218.163.xxx.xxx 未訂閱
我想填入浮點數的bits    以下為程式碼 
#include     void main()
{
        union myfloat{
                float f;
                unsigned char cc[4];
        };            union myfloat fnum;
        fnum.cc[0]=0x00;
        fnum.cc[1]=0x00;
        fnum.cc[2]=0x00;
        fnum.cc[3]=0x40;  
        printf("%f\n", fnum.f);
}
 
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-28 10:33:41 IP:61.229.xxx.xxx 未訂閱
不知道你是不是要 IEEE format 的 float bits ? 
void TestFloat()
{
  union myFloat {
    float mF; // 實際的 float 值
    struct FloatStruct {
      long mExponent : 8;
      long mMantissa : 23;
      long mSign : 1;
    } mStFloat;
  };      myFloat aF;
  aF.mF = 0.f;
  aF.mF = -1.2f;
  aF.mF = 1.2f;
}
ricel
一般會員


發表:6
回覆:6
積分:2
註冊:2005-03-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-28 21:19:34 IP:218.163.xxx.xxx 未訂閱
嗯 好像是IEEE的浮點數表示法 我想問當輸入二進位的數字 要如何才能使cc或mExponent,mMantissa,mSign 讀取到相對應的值
windblown
中階會員


發表:0
回覆:117
積分:98
註冊:2003-11-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-29 10:50:45 IP:61.229.xxx.xxx 未訂閱
抱歉,之前是錯的    因為 c/c++ 無法使用二進位,所以可能要改用十六進位來表達你要輸入的數值     
  union myFloat {
    float mF; // 實際的 float 值
    struct FloatStruct {
      unsigned long mMantissa : 23;
      unsigned long mExponent : 8;
      unsigned long mSign : 1;
    } mStFloat;
  };
  myFloat aF;
  aF.mF = -16.f; // mSign=1, mExponent =0x83, mMantissa=0
  aF.mStFloat.mSign = 0; // mF =16.0
  aF.mStFloat.mExponent = 0x84; // aF.mf = 32.0
ricel
一般會員


發表:6
回覆:6
積分:2
註冊:2005-03-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-29 14:21:35 IP:218.163.xxx.xxx 未訂閱
我己經把問題解決了 多謝windblown幫忙解惑
系統時間:2024-05-02 9:15:02
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!