尾數存儲
A. float和double型分別怎麼存儲
C/C++的浮點數據類型有float和double兩種。
類型float大小為4位元組,即32位,內存中的存儲方式如下: 符號位(1 bit) 指數(8 bit) 尾數(23 bit)
類型double大小為8位元組,即64位,內存布局如下: 符號位(1 bit) 指數(11 bit) 尾數(52 bit)
符號位決定浮點數的正負,0正1負。
指數和尾數均從浮點數的二進制科學計數形式中獲取。
如,十進制浮點數2.5的二進制形式為10.1,轉換為科學計數法形式為(1.01)*(10^1),由此可知指數為1,尾數(即科學計數法的小數部分)為01。
根據浮點數的存儲標准(IEEE制定),float類型指數的起始數為127(二進制0111 1111),double類型指數的起始數為1023(二進制011 1111 1111),在此基礎上加指數,得到的就是內存中指數的表示形式。尾數則直接填入,如果空間多餘則以0補齊,如果空間不夠則0舍1入。所以float和double類型分別表示的2.5如下(二進制):
符號位
指數
尾數
0
1000 0000
010 0000 0000 0000 0000 0000
0
100 0000 0000
0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
B. 數據的表示方法大尾數小尾數
大尾小尾 是數據在存儲器中的存儲格式,INtel採用的是小尾表示,即數據的高位存儲在存儲器的高地址,低位存儲在存儲器的低地址,例如一個十六進制數據0x1234存儲在內存中,那麼該數據在內存中的存儲格式為: 34 12 == 內存方向是 從底(左)到高(右)而大尾數據存儲格式,一般存在摩托羅拉系統的XX中(忘記了) ,存儲格式剛好和小相反,高位低存,低位高存,還是數據0x1234 在內存中的存儲格式為: 12 34 ,高位的12存儲在低地址的存儲器地址中,低位34存儲在高地址中=====大小 只是一種數據存儲格式
C. Java中double的取值范圍為1.79E308。E308是什麼意思
此說法正確:
這個是科學計數法,E308表示10的308次方.
1.79E308也就是1.79乘以10的308次方
關於位存儲:
比如1位,只能表示0和1,所以1位最大值1
比如2位,0到3,所以最大值3.
關於long:
long共64位其中1位是符號位正負,剩餘63位,
表示最大數 2^63-1 =9223372036854775807
long用途:
十進制就有19位,如果你的訂單低於19位就能使用long來存儲。
問題:
double為什麼表示的整數比long大,都是64位啊
原來double,把64位劃分了幾個 部分,
1、有符號位,指數位,尾數位,通過降低精確度存儲更大的數字。
2、尾數52位存儲具體數字,指數11位和小數點位置有關,符號位1位代表正負
3、如果整數,你的數超過2^52,double就不精確了,開始舍棄精度
4、如果小數,小數點後邊的數超過2^52,double就不精確了,開始舍棄精度
double的應用:
只是提供了小數支持,小數精確到16位左右。也能存儲整數。
但是整數精確只能表示2^52以內的數,超過就不精確了。
所以19位以內的整數可以用long,16以內的小數和整數用double