剖析各型別和整數 浮點數在記憶體中的儲存

2021-08-04 08:12:05 字數 1744 閱讀 2413

**資料型別的介紹及有無符號型**

**內建型別**

int main()

else

if (ret==0)

system("lpause");

return0;}

做法2:

聯合成員共用同一塊兒儲存空間,聯合的大小至少是最大成員的大小,但不一定是最大成員的大小。

#include

#include

int check_sys()

u; u.i = 1;

return u.c;

}int main()

if (ret == 0)

system("pause");

return0;}

參與運算的數,他們的大小如果沒有達到整形的大小時,先進行整形提公升,再進行運算,提公升時補符號位。無符號數前面補零。(按%d和%u輸出時,一定要整形提公升)。

#include

#include

int main()

printf("%d\n", strlen(a));

system("pause");

}輸出結果為 1

分析:strlen是求字串長度,遇到\0就結束

#include

#include

int main()

printf("%d\n", strlen(a));

system("pause");

}輸出結果為 255

分析:從-1......-128、127......1、0

**浮點型在記憶體中的儲存**

常見的浮點數:

3.14159

1e10 ---表示1.0*10^10

浮點數家族:float、double、long

double 型別

浮點數的表示範圍:float.h中定義

1、ieee(電氣和電子工程協會)754:

任意乙個二進位制浮點數v可以表示成下面的形式:(-1)^s*m*2*e

(-1)^s表示符號位,當s=0,v為正數;當s=1,v為負數。

m表示有效數字,大於1,小於2。

2^e表示指數字。

2、ieee754規定:

對於32位的浮點數,最高的一位是符號位s,接著的八位是指數e,剩下的23位為有效數字m。

3、ieee754對有效數字m和指數e,還有一些特殊的規定。

前面說過,1

2,也就是說,m可以寫成1.******的形式,其中******表示小數部分。

統一將其1省略,只儲存後面的******部分,讀取時再將第一位的1加上。

至於指數e,情況就比較複雜:

首先,e為乙個無符號整數(unsigned

int)

這就意味著,如果e為8位,它的取值範圍為0~255;如果e為11位,它的取值範圍為0~2047。

**e不為全0或全1**

ieee規定,存入記憶體的e的真實值必須加上乙個中間數(為了解決指數是負數的情況),對於8位(單精度型)的e,這個中間數是127;對於11位(雙精度double型)的e,這個中間數是1023.

**e為全0**

這時,浮點數的指數e等於1-127(或者1-1023)即為真實值

有效數字m不再加上第一位的1,而是還原為0.******的小數。這樣做是為了表示±0;以及接近與0的很小的數字。

**e為全1**

這時,如果有效數字m全為0,表示±無窮大(正負取決於符號位s);

整數和浮點數在記憶體中的儲存

include include intislittleend return0 int main 執行結果 負整數在記憶體的儲存 負數以補碼的形式儲存問題1 include include int main 具體求步驟 d 表示列印的是乙個有符號的十進位制的整數.1 針對char a 1 求解過程 第...

整數,浮點數在記憶體中的儲存

整數 符號數 計算機中的符號數有三種表示方法,即原碼,反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示 正 用1表示 負 而數值位表示方法各不相同。原碼 直接將二進位制按照正負數的形式翻譯成二進位制就可以。反碼 符號位不變,其他位按位取反即可得到。補碼 反碼加一得到補碼。在計算機...

浮點數在記憶體中的表示

c語言的float對應單精度浮點數,由1位符號 8位指數 23位尾數組成 尾數部分是二進位制小數,那23位是小數點後面的部分,小數點前面還有個隱含的1並不儲存 二進位制小數和十進位制小數道理一樣,只是基數變成2 比如十進位制的3.14 3x10 0 1x10 1 4x10 2 3 1 10 4 10...