**資料型別的介紹及有無符號型**
**內建型別**
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...