資料的表現形式及其運算
1、符號常量和常變數的區別?
#define PI 3.1415926 //定義符號常量
const float pi=3.1415926 //定義常變數
符號常量PI和常量pi都代表3.1415926,在程式中都能使用。但二者性質不同:
I.定義符號常量用#define預編譯指令,它只是用符號常量代表一個字串,在預編譯時僅是進行字元替換,在預編譯後,符號常量就不存在了(全部置換成3.1415926),對符號常量的名字不分配儲存單元;
II.常變數佔用儲存單元,有變數值,只是該值不改變。
從使用角度看,常變數具有符號變數的優點,且使用更方便。有了常變數後,可以不必多用符號常量。
2、識別符號
C語言規定識別符號只能由字母、數字和下劃線組成,且第一個字元必須為字母或下劃線。
注:識別符號區分大小寫。
3、資料型別
整型資料
(1)int型:編譯系統分配2個位元組(16個二進位,Turbo C 2.0)或4個位元組(32個二進位,Visual C++),在儲存單元中的儲存方式是:用整數的補碼形式存放。
正數補碼:該數的二進位制形式,如5的補碼:00000000 00000101
負數補碼:先將此數的絕對值寫成二進位制形式,然後對其後面所有各二進位按位取反,再加1
-5的補碼:11111111 11111011
5的原碼: 00000000 00000101
按位取反:11111111 11111010
再加1: 11111111 11111011
儲存單元中,最左邊一位為符號位,0表示正數,1表示負數。所以,若給整型變數分配2個位元組時,正數最大為01111111 111111111(即2^15-1),最小值為10000000 00000000(即-2^15),也就是說,一個整型變數的取值範圍為:-2^15~2^15-1;同理,若給整型變數分配4個位元組時,取值範圍為-2^31~2^31-1。
不同編譯系統給資料分配不同的空間,為了方便,後文全部以Visual C++ 6.0為例。
(2)short int型:分配2個位元組。
(3)long int型:分配4個位元組。
(4)long long int型:分配8個位元組。
注:C標準沒有具體規定各種型別資料所佔用儲存單元的長度,這是由各編譯系統決定的,C標準只要求long型資料長度大於int型,int型大於short型。
字元型資料
儲存方式:程式碼(整數)形式儲存,即以整數形式(字元的ASCII程式碼)存放在記憶體單元中的。
大寫字母ASCII程式碼:65~90
小寫字母ASCII程式碼:97~122
數字0~9ASCII程式碼:48~57
char型資料分配1個位元組,即一個char型變數的取值範圍為:-128~127,但字元的程式碼不可能為負值,所以在儲存字元是實際上只用到0~127這一部分,其第一位都是0.
浮點型資料
儲存方式:以指數形式儲存。儲存時將實型資料分成小數部分和指數部分。
float型(單精度浮點型):分配4個位元組,6位有效數字。
double型(雙精度浮點型):分配8個位元組15位有效數字。
long double型(長雙精度型):Turbo C 2.0系統分配16個位元組,19位有效數字,Visual C++ 6.0系統分配8個位元組,15個有效數字。
4、運算子和表示式
基本運算子
+,-,*,/,%,+,-
注:i) 兩個實數相除結果是雙精度實數,兩個整數相除結果是整數,如5/3=1;但若除數或被除數中有一個為負值,則舍入方向不固定。
ii) %運算子要求參加運算的運算物件是整數,結果也是整數。
自增、自減運算子
區分++i,i++:
++i:使用i**之前**,i的值加1;
i++:使用i**之後**,i的值加1;
如:
i=3;
printf("%d",++i); //輸出:4
printf("%d",i++); //輸出:3
運算子和結合性
結合方向自右至左的運算子:!,~,++,–,-(負號),(型別)即型別轉換符,*,&,sizeof,? :(條件運算子),賦值運算子。其運算子結合方向為自左至右。
優先順序:
初等運算子 () [ ] -> ·
單目運算子
算數運算子
關係運算符
邏輯運算子(不包括!)
條件運算子
賦值運算子
逗號運算子