c語言浮點數10為什麼在棧中是3f800000?請高手解

2022-02-25 13:40:51 字數 1790 閱讀 4431

1樓:匿名使用者

這個和浮點數的表示有關,通常是ieee745表示,詳見

對於32位浮點數,內部表示為

符號位1位 | 指數8位 | 尾數 23位對於1.0而言,我們可以表示為二進位制,+ 1 * 2^0。此時符號位為0,表示正數。

而尾數為0,因為有一個隱藏的位(始終為1)用來表示規格化浮點數。指數比較特殊,是以無符號數的形式來表示有符號數。對於8位無符號數,範圍為[0, 255],若該無符號數為a,那麼有符號數就是a-127。

由於此時指數0,那麼其無符號數表示為127,綜上,我們得到二進位制表示為

0 0111 1111 0000 0000 0000 0000 000

0011 1111 1000 0000 0000 0000 0000也就是3f80000h

由於int的表示就是補碼錶示,所以是0x1h

2樓:匿名使用者

ieee754浮點數標準所定義的浮點數的二進位制表達法和數學中十進位制小數化二進位制小數是不一樣的,詳見

以前一個類似問題的回答見

float a=1.0f在記憶體中的表示是3f800000,這個3f800000是怎麼得出的?麻煩誰解答下

3樓:匿名使用者

1.0f的二進位制表示為3f800000,

即0 01111111 00000...

其中1位符號位為0,表示正數。8位階碼為01111111,即127,根據ieee754標準,從二進位制階碼轉化為實際指數,需要減去固定偏移2^7-1,即127,所以實際指數為127-127=0。尾數部分的1為規約形式的浮點數的一位隱含的二進位制有效數字,這裡未出現,其他23位尾數這裡為全0。

那麼1.0f = + 1 * 2^0

4樓:匿名使用者

3f800000h=0 01111111 00000000000000000000000b (注意我分成了三段)

符點型資料在x86機上佔四個位元組,其儲存按ieee754標準實現,即:

1位的符號位s 0(代表正數,1代表負數)

8位的指數位e(移碼錶示)01111111是0的移碼

23位的小數位f 0000000000000000000000 表示小數部分為0

計算機在表示符點數時,要將10進位制數轉成二進位制的規範數形式進行儲存的。即:1.f*2^e在儲存時,小數前面的1是隱式儲存的,不體現在資料中。

現在翻譯一下:

3f800000h=1.0*2^0=1.0

5樓:手機使用者

給你一個比較標準的答覆: 浮點數轉化為整數時,是取整,而化為整數引用時 (int&)a 相當於 *(int*)&a。 所以 float a=1.

0f; (int)a 和 (int&)a 是不同的,1.0f在記憶體中是 3f800000,作為int看待的話是1065353216,所以(int)a等於1,(int&)a等於1065353216。 而之所以當b=0.

0f時,(int)b 和 (int&)b 相等,是因為0.0f和0的記憶體佈局正好一致,都是 00000000。

2011/8/31 15:12:28

6樓:哀傷の霜之哀傷

那是地址,由編譯器分配。

c語言中怎樣判斷輸入的是整數還是浮點數

先存成字串,判斷有沒有小數點,再從字串格式化成整型或浮點型。include include include char strchr const char str,int ch int main int argc,char argv else system pause return 0 scanf s...

C語言,int pp 10為什麼是錯的

指標p的指向沒有確定,是一個野指標,對野指標指向空間賦值是錯的 c語言中int x 5 p x p 1的值 c是指標變數,p是表示其地址 而x未賦值,所以 x 1 是錯誤的 if x y 中的x 相當於 x 1 結果為 x 6 你寫錯了吧,感覺有點亂,你看看錯了嗎 c語言,char a 10 p p...

xx1c語言中什麼意思,在c語言中x10是什麼意思

x x 1c 等價於抄 x x x 1 x 1即進行十進襲制的減法,如x 為十進位制的30,則x 1的結果為十進位制的29 如果結果用2個位元組表示則結果為 00 00 00 00 00 01 11 01 又因為x 是30其二進位制表示為 00 00 00 00 00 01 11 10 是為運算的與...