?? 3.txt
字號:
3 數據類型、運算符與表達式 1
3.1 C語言的數據類型 1
3.2 常量與變量 3
3.2.1 常量和符號常量 3
3.2.2 變量 3
3.3 整型數據 4
3.3.1 整型常量的表示方法 4
3.3.2 整型變量 5
3.4 實型數據 7
3.4.1 實型常量的表示方法 7
3.4.2 實型變量 8
3.4.3 實型常數的類型 9
3.5 字符型數據 9
3.5.1 字符常量 9
3.5.2 轉義字符 9
3.5.3 字符變量 10
3.5.4 字符數據在內存中的存儲形式及使用方法 10
3.5.5 字符串常量 11
3.5.6 符號常量 12
3.6 變量賦初值 12
3.7 各類數值型數據之間的混合運算 13
3.8 算術運算符和算術表達式 14
3.8.1 C運算符簡介 14
3.8.2 算術運算符和算術表達式 15
3.9 賦值運算符和賦值表達式 17
3.10 逗號運算符和逗號表達式 18
3.11 小結 19
3.11.1 C的數據類型 19
3.11.2 基本類型的分類及特點 19
3.11.3 常量后綴 19
3.11.4 常量類型 19
3.11.5 數據類型轉換 19
3.11.6 運算符優先級和結合性 20
3.11.7 表達式 20
3 數據類型、運算符與表達式
3.1 C語言的數據類型
在第一章中,我們已經看到程序中使用的各種變量都應預先加以定義,即先定義,后使用。對變量的定義可以包括三個方面:
?數據類型
?存儲類型
?作用域
在本章中,我們只介紹數據類型的說明。其它說明在以后各章中陸續介紹。所謂數據類型是按被定義變量的性質,表示形式,占據存儲空間的多少,構造特點來劃分的。在C語言中,數據類型可分為:基本數據類型,構造數據類型,指針類型,空類型四大類。
1. 基本數據類型:基本數據類型最主要的特點是,其值不可以再分解為其它類型。也就是說,基本數據類型是自我說明的。
2. 構造數據類型:構造數據類型是根據已定義的一個或多個數據類型用構造的方法來定義的。也就是說,一個構造類型的值可以分解成若干個“成員”或“元素”。每個“成員”都是一個基本數據類型或又是一個構造類型。在C語言中,構造類型有以下幾種:
?數組類型
?結構體類型
?共用體(聯合)類型
3. 指針類型:指針是一種特殊的,同時又是具有重要作用的數據類型。其值用來表示某個變量在內存儲器中的地址。雖然指針變量的取值類似于整型量,但這是兩個類型完全不同的量,因此不能混為一談。
4. 空類型:在調用函數值時,通常應向調用者返回一個函數值。這個返回的函數值是具有一定的數據類型的,應在函數定義及函數說明中給以說明,例如在例題中給出的max函數定義中,函數頭為:int max(int a,int b);其中“int ”類型說明符即表示該函數的返回值為整型量。又如在例題中,使用了庫函數sin,由于系統規定其函數返回值為雙精度浮點型,因此在賦值語句s=sin (x);中,s 也必須是雙精度浮點型,以便與sin函數的返回值一致。所以在說明部分,把s說明為雙精度浮點型。但是,也有一類函數,調用后并不需要向調用者返回函數值,這種函數可以定義為“空類型”。其類型說明符為void。在后面函數中還要詳細介紹。
在本章中,我們先介紹基本數據類型中的整型、浮點型和字符型。其余類型在以后各章中陸續介紹。
3.2 常量與變量
對于基本數據類型量,按其取值是否可改變又分為常量和變量兩種。在程序執行過程中,其值不發生改變的量稱為常量,其值可變的量稱為變量。它們可與數據類型結合起來分類。例如,可分為整型常量、整型變量、浮點常量、浮點變量、字符常量、字符變量、枚舉常量、枚舉變量。在程序中,常量是可以不經說明而直接引用的,而變量則必須先定義后使用。
整型量包括整型常量、整型變量。
3.2.1 常量和符號常量
在程序執行過程中,其值不發生改變的量稱為常量。
? 直接常量(字面常量):
? 整型常量:12、0、-3;
? 實型常量:4.6、-1.23;
? 字符常量:‘a’、‘b’。
? 標識符:用來標識變量名、符號常量名、函數名、數組名、類型名、文件名的有效字符序列。
? 符號常量:用標示符代表一個常量。在C語言中,可以用一個標識符來表示一個常量,稱之為符號常量。
符號常量在使用之前必須先定義,其一般形式為:
#define 標識符 常量
其中#define也是一條預處理命令(預處理命令都以"#"開頭),稱為宏定義命令(在后面預處理程序中將進一步介紹),其功能是把該標識符定義為其后的常量值。一經定義,以后在程序中所有出現該標識符的地方均代之以該常量值。
? 習慣上符號常量的標識符用大寫字母,變量標識符用小寫字母,以示區別。
【例3.1】符號常量的使用。
#define PRICE 30
main()
{
int num,total;
num=10;
total=num* PRICE;
printf(“total=%d”,total);
}
? 用標識符代表一個常量,稱為符號常量。
? 符號常量與變量不同,它的值在其作用域內不能改變,也不能再被賦值。
? 使用符號常量的好處是:
? 含義清楚;
? 能做到“一改全改”。
3.2.2 變量
其值可以改變的量稱為變量。一個變量應該有一個名字,在內存中占據一定的存儲單元。變量定義必須放在變量使用之前。一般放在函數體的開頭部分。要區分變量名和變量值是兩個不同的概念。
3.3 整型數據
3.3.1 整型常量的表示方法
整型常量就是整常數。在C語言中,使用的整常數有八進制、十六進制和十進制三種。
1) 十進制整常數:十進制整常數沒有前綴。其數碼為0~9。
以下各數是合法的十進制整常數:
237、-568、65535、1627;
以下各數不是合法的十進制整常數:
023 (不能有前導0)、23D (含有非十進制數碼)。
在程序中是根據前綴來區分各種進制數的。因此在書寫常數時不要把前綴弄錯造成結果不正確。
2) 八進制整常數:八進制整常數必須以0開頭,即以0作為八進制數的前綴。數碼取值為0~7。八進制數通常是無符號數。
以下各數是合法的八進制數:
015(十進制為13)、0101(十進制為65)、0177777(十進制為65535);
以下各數不是合法的八進制數:
256(無前綴0)、03A2(包含了非八進制數碼)、-0127(出現了負號)。
3) 十六進制整常數:十六進制整常數的前綴為0X或0x。其數碼取值為0~9,A~F或a~f。
以下各數是合法的十六進制整常數:
0X2A(十進制為42)、0XA0 (十進制為160)、0XFFFF (十進制為65535);
以下各數不是合法的十六進制整常數:
5A (無前綴0X)、0X3H (含有非十六進制數碼)。
4) 整型常數的后綴:在16位字長的機器上,基本整型的長度也為16位,因此表示的數的范圍也是有限定的。十進制無符號整常數的范圍為0~65535,有符號數為-32768~+32767。八進制無符號數的表示范圍為0~0177777。十六進制無符號數的表示范圍為0X0~0XFFFF或0x0~0xFFFF。如果使用的數超過了上述范圍,就必須用長整型數來表示。長整型數是用后綴“L”或“l”來表示的。
例如:
十進制長整常數:
158L (十進制為158)、358000L (十進制為358000);
八進制長整常數:
012L (十進制為10)、077L (十進制為63)、0200000L (十進制為65536);
十六進制長整常數:
0X15L (十進制為21)、0XA5L (十進制為165)、0X10000L (十進制為65536)。
長整數158L和基本整常數158 在數值上并無區別。但對158L,因為是長整型量,C編譯系統將為它分配4個字節存儲空間。而對158,因為是基本整型,只分配2 個字節的存儲空間。因此在運算和輸出格式上要予以注意,避免出錯。
無符號數也可用后綴表示,整型常數的無符號數的后綴為“U”或“u”。
例如:
358u,0x38Au,235Lu均為無符號數。
前綴,后綴可同時使用以表示各種類型的數。如0XA5Lu表示十六進制無符號長整數A5,其十進制為165。
3.3.2 整型變量
1. 整型數據在內存中的存放形式
如果定義了一個整型變量i:
int i;
i=10;
i 10
0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
數值是以補碼表示的:
? 正數的補碼和原碼相同;
? 負數的補碼:將該數的絕對值的二進制形式按位取反再加1。
例如:
求-10的補碼:
10的原碼:
0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0
取反:
1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1
再加1,得-10的補碼:
1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0
由此可知,左面的第一位是表示符號的。
2. 整型變量的分類
1) 基本型:類型說明符為int,在內存中占2個字節。
2) 短整量:類型說明符為short int或short。所占字節和取值范圍均與基本型相同。
3) 長整型:類型說明符為long int或long,在內存中占4個字節。
4) 無符號型:類型說明符為unsigned。
無符號型又可與上述三種類型匹配而構成:
? 無符號基本型:類型說明符為unsigned int或unsigned。
? 無符號短整型:類型說明符為unsigned short。
? 無符號長整型:類型說明符為unsigned long。
各種無符號類型量所占的內存空間字節數與相應的有符號類型量相同。但由于省去了符號位,故不能表示負數。
有符號整型變量:最大表示32767
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
無符號整型變量:最大表示65535
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
下表列出了Turbo C中各類整型量所分配的內存字節數及數的表示范圍。
類型說明符 數的范圍 字節數
int -32768~32767 即-215~(215-1) 2
unsigned int 0~65535 即0~(216-1) 2
short int -32768~32767 即-215~(215-1) 2
unsigned short int 0~65535 即0~(216-1) 2
long int -2147483648~2147483647即-231~(231-1) 4
unsigned long 0~4294967295 即0~(232-1) 4
以13為例:
int型:
00 00 00 00 00 00 11 01
short int型:
00 00 00 00 00 00 11 01
long int型:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 01
unsigned int型:
00 00 00 00 00 00 11 01
unsigned short int型:
00 00 00 00 00 00 11 01
unsigned long int型:
00 00 00 00 00 00 00 00 00 00 00 00 00 00 11 01
3. 整型變量的定義
變量定義的一般形式為:
類型說明符 變量名標識符,變量名標識符,...;
例如:
int a,b,c; (a,b,c為整型變量)
long x,y; (x,y為長整型變量)
unsigned p,q; (p,q為無符號整型變量)
在書寫變量定義時,應注意以下幾點:
? 允許在一個類型說明符后,定義多個相同類型的變量。各變量名之間用逗號間隔。類型說明符與變量名之間至少用一個空格間隔。
? 最后一個變量名之后必須以“;”號結尾。
? 變量定義必須放在變量使用之前。一般放在函數體的開頭部分。
【例3.2】整型變量的定義與使用。
main()
{
int a,b,c,d;
unsigned u;
a=12;b=-24;u=10;
c=a+u;d=b+u;
printf(“a+u=%d,b+u=%d\n”,c,d);
}
4. 整型數據的溢出
【例3.3】整型數據的溢出。
main()
{
int a,b;
a=32767;
b=a+1;
printf("%d,%d\n",a,b);
}
32767:
0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -