簡體   English   中英

內存中的浮點表示對我來說還不清楚

[英]floating point representation in memory is just not clear for me

我的任務是獲取浮點數的一部分,然后將其存儲在int中。 看起來很容易。 我做了這個測試:

float f = 3.1415f;
printf("int pres. of float: %d\n"
       "int:                %d", *((int *)&f), 31415);

輸出:

int pres. of float: 1078529622

int: 31415

我將其更改為2,以查看31415的位置。

0100 0000 0100 1001 0000 1110 0101 0110 - 3.1415
                    0111 1010 1011 0111 - 31415

我不知道該怎么辦。 我怎樣才能得到分數作為一個簡單的整數?

如果我們取2.5而不是3.1415,因為它很容易理解...

因此,您的假設是2.5和25應該具有相同的二進制格式。 不是這種情況。 25 = 0x19 =11001。2.5 = 10.1。 完全不一樣。

如果您想為3.1415做同樣的數學運算,它會像這樣:

3      = 11 (I can do that)
1/8    = 0.001  
0.1415 - 0.125 = 0.0165
1/64   = 0.000001
0.0165 - 0.015625 = 0.000875
1/2048 = 0.00000000001

現在,我們還需要處理0.1415的一部分,但粗略的結果是11.00100100001。

現在,如果我們比較您的二進制輸出(從尾數部分開始),並插入一個小數點,並考慮到浮點數“忽略第一個”:

  11.00100100001
   1.00100100001110

似乎我上面的塗鴉還沒有完全消失...;)

猜猜您需要從https://en.wikipedia.org/wiki/IEEE_floating_point開始。 這將告訴您有關浮點數的各種表示形式

有兩個關鍵的並發症。 一種是float是二進制浮點類型,因此它不能精確表示3.1415f。 您所擁有的只是一個近似值。 可以精確表示的最接近的浮點值是3.141499996185302734375。

另一個是3.1415f在歸一化數字范圍內,這意味着有效位的最高有效位(如果存儲)將是一個非零的二進制數字,因此不會被存儲。

暫無
暫無

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

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