[英]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.