回顧預設轉換:
byte(1b),char(2b),short(2b) -- int(4b) -- long(8b) -- float(4b) -- double(8b)
問題:為什麼預設轉換時float型在long型後面?
原因:1.他們的底層儲存結構不同
2.float型別的表示範圍比long型大
long:2^63-1
float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*(2^3)^38 = 2*2^114 > 2^63
char型可以儲存乙個漢字嗎?
可以。char型佔兩個位元組。可以存下乙個漢字。
float型別數字在計算機中用4個位元組儲存(由於儲存方式不同,所以他表示的範圍比long能表示的範圍要大)。遵循ieee-754格式標準:
乙個浮點數有2部分組成:底數m和指數e
底數部分 使用二進位制數來表示此浮點數的實際值
指數部分 占用8bit的二進位制數,可表示數值範圍為0-255
但是指數可正可負,所以,ieee規定,此處算出的次方必須減去127才是真正的指數。
所以,float型別的指數可從-126到128
底數部分實際是占用24bit的乙個值,但是最高位始終為1,所以,最高位省去不儲存,在儲存中佔23bit
科學計數法。
格式:seee eeee emmm mmmm mmmm mmmm mmmm mmmm
s表示浮點數正負
e指數加上127後的值得二進位制資料
m底數舉例:
17.625在記憶體中的儲存
首先要把17.625換算成二進位制:10001.101
整數部分,除以2,直到商為0,餘數反轉。
小數部分,乘以2,直到乘位0,進製順序取。
在將10001.101右移,直到小數點前只剩1位:
1.0001101 * 2^4 因為右移動了四位
這個時候,我們的底數和指數就出來了
底數:因為小數點前必為1,所以ieee規定只記錄小數點後的就好。所以,此處的底數為:0001101
指數:實際為4,必須加上127(轉出的時候,減去127),所以為131。也就是10000011
符號部分是正數,所以是0
綜上所述,17.625在記憶體中的儲存格式是:
01000001 10001101 00000000 00000000
float 資料的儲存方式
3.以下兩條輸出語句分別輸出什麼?c 難 float a 1.0f cout int a endl cout int a endl cout boolalpha int a int a endl 輸出什麼?float b 0.0f cout int b endl cout int b endl co...
float儲存方式
c語言 今天在程式中對uint32 t強制轉換float,結果發現是有損轉換,向大佬請教後得知是float儲存的比32bit的值小,所以通過詳細學習float儲存,彌補學習的短板。學習的出處為 感謝 1 s表示符號位,當s 0,v為正數 當s 1,v為負數 2 m表示有效數字,大於等於1,小於2。3...
float資料型別在記憶體中的儲存方式
我們都很熟悉int型別在記憶體中的儲存方式,即直接按照二進位制方式儲存。我們可以通過以下c語言 讀取到記憶體中實際是如何儲存這些數字的。int main 首先解釋為什麼是從 p 3 從大到小逐個輸出 這是因為我們生活中用的電腦都是以小端模式來儲存資料的,即資料的高位元組儲存在記憶體的高位址中,而資料...