float在內存中占4個字節(32bit),32bit=符號位(1bit)+指數位(8bit)+底數位(23bit) 指數部分 指數位占8bit,可以表示數值的范圍是0-255(表示0~255一共256個數),因為指數可正可負,所以IEEE規定,此處算出的次方必須減去127才是真正的指數,
所以float的指數范圍是 -127(0-127) 到+128(255-127)。 底數部分 任何一個數的科學記數法都可以表示為1.xxx*2^n,小數部分就可以表示為xxx,整數部分永遠是1,不影響精度,所以可以不用儲存。23bit二進制可以表示的
最大值是2^23=8388608,一共7位,這意味着最多能有7位有效數字(不能表示比8388608大的數值),但絕對能保證的為6位,即float的精度為6~7位有效數字。 以8.25為例: 8.25=1000.01 1000.01的科學記數法是1.00001*2^3 符號位,正數為0,負數為1 指數=3,即x-127=3,因此x=130,所以指數位應該是130,對應的二進制數是10,000,010 底數=00001,不足補0,所以23bit對應的二進制數是00,001,000,000,000,000,000,000 所以最終在內存中二進制數是 0 10,000,010 00,001,000,000,000,000,000,000 4個字節的值是 65 4 0 0
說明:本人主機的字節序是大端字節序,所以順序相反
double存儲方式和float相同,區別在於64bit=符號位(1bit)+指數位(11bit)+底數位(52bit)
指數部分算出的次方必須減去1023才是真正的指數,
double的小數部分可以表示的最大值是2^52=4,503,599,627,370,496,這意味着最多能有16位有效數字,但絕對能保證的為15位,即double的精度為15~16位有效數字。