# 3.C語言整型數據
整型量包括整型常量、整型變量。
## 整型常量的表示方法
整型常量就是整常數。在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。
## 整型變量
1) 整型數據在內存中的存放形式
如果定義了一個整型變量i:
~~~
int i;
i=10;
~~~

數值是以補碼表示的:
* 正數的補碼和原碼相同;
* 負數的補碼:將該數的絕對值的二進制形式按位取反再加1。
例如:求-10的補碼:

由此可知,左面的第一位是表示符號的。
2) 整型變量的分類
1. 基本型:類型說明符為int,在內存中占2個字節。
2. 短整量:類型說明符為short int或short。所占字節和取值范圍均與基本型相同。
3. 長整型:類型說明符為long int或long,在內存中占4個字節。
4. 無符號型:類型說明符為unsigned。
無符號型又可與上述三種類型匹配而構成:
* 無符號基本型:類型說明符為unsigned int或unsigned。
* 無符號短整型:類型說明符為unsigned short。
* 無符號長整型:類型說明符為unsigned long。
各種無符號類型量所占的內存空間字節數與相應的有符號類型量相同。但由于省去了符號位,故不能表示負數。

下表列出了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為例:

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);
}
~~~

【例3-4】
~~~
main(){
long x,y;
int a,b,c,d;
x=5;
y=6;
a=7;
b=8;
c=x+a;
d=y+b;
printf("c=x+a=%d,d=y+b=%d\n",c,d);
}
~~~
從程序中可以看到:x、y是長整型變量,a、b是基本整型變量。它們之間允許進行運算,運算結果為長整型。但c、d被定義為基本整型,因此最后結果為基本整型。本例說明,不同類型的量可以參與運算并相互賦值。其中的類型轉換是由編譯系統自動完成的。有關類型轉換的規則將在以后介紹。
- 前言
- 一. C語言概述
- 1.C語言的發展及其版本
- 2.C語言工作原理和運行機制
- 3.C語言編譯器(開發工具|IDE)推薦
- 4.C語言的特點
- 5.第一個C語言程序
- 6.C語言輸出函數(printf)和輸入函數(scanf)
- 7.C語言程序的結構特點
- 8.C語言字符集
- 9.C語言詞匯
- 二. C語言算法
- 1.什么是算法|算法的概念
- 2.簡單的C語言算法舉例
- 3.C語言算法的特性
- 4.用流程圖表示算法
- 5.三種基本結構的流程圖
- 6.用N-S流程圖表示算法
- 7.用計算機語言表示算法
- 三. 數據類型和運算符
- 1.C語言的數據類型
- 2.C語言常量與變量
- 3.C語言整型數據
- 4.C語言實型數據
- 5.C語言字符型數據
- 6.C語言變量賦初值
- 7.C語言數據類型轉換
- 8.C語言算術運算符和算術表達式
- 9.C語言賦值運算符和賦值表達式
- 10.C語言逗號運算符和逗號表達式
- 四. 順序程序設計
- 1.C語言語句概述
- 2.C語言賦值語句詳解
- 3.C語言數據的輸入輸出
- 4.C語言字符的輸入輸出
- 7.C語言順序結構程序設計舉例
- 五. 分支結構
- 1.C語言關系運算符和表達式
- 2.C語言邏輯運算符和表達式
- 3.C語言if語句詳解
- 4.C語言switch語句的用法詳解
- 5.C語言條件運算符和條件表達式
- 6.C語言分支結構程序舉例
- 六. 循環控制
- 1.C語言循環控制概述
- 2.C語言goto語句以及用goto語句構成循環
- 3.C語言while語句的用法
- 4.C語言do-while語句的用法
- 5.C語言for語句用法詳解
- 6.C語言幾種循環的比較
- 7.C語言break和continue語句的用法
- 8.C語言循環控制程序舉例
- 七. C語言數組
- 1.C語言一維數組的定義和引用
- 2.C語言二維數組的定義和引用
- 3.C語言字符數組及其應用
- 4.C語言常用字符串處理函數
- 5.C語言數組應用舉例
- 6.C語言數組小結
- 八. C語言函數
- 1.C語言函數概述
- 2.C語言函數的定義
- 3.C語言函數的參數和返回值
- 4.C語言函數的調用
- 5.C語言函數的嵌套調用
- 6.C語言函數的遞歸調用
- 7.C語言數組作為函數參數
- 8.C語言局部變量和全局變量
- 9.C語言變量的存儲類別
- 九. 預處理命令
- 1.C語言預處理概述
- 2.C語言無參數宏定義
- 3.C語言帶參數宏定義
- 4.C語言文件包含命令
- 5.C語言條件編譯詳解
- 6.C語言預處理指令總結
- 十. C語言指針
- 1.C語言指針的概念
- 2.C語言指針變量
- 3.C語言指針變量作為函數參數
- 4.C語言指針變量的運算
- 5.C語言數組指針
- 6.C語言通過指針引用數組
- 7.C語言數組名作函數參數
- 8.C語言指向多維數組的指針
- 9.C語言字符串指針
- 10.C語言字符串指針變量與字符數組的區別
- 11.C語言函數指針變量
- 12.C語言指針型函數
- 13.C語言指針數組的概念
- 14.C語言指向指針的指針
- 15.C語言main函數參數
- 16.關于指針的總結
- 十一. 結構體和共用體
- 1.C語言結構體的定義
- 2.C語言結構類型變量的說明
- 3.C語言結構變量成員的表示方法
- 4.C語言結構變量的賦值
- 5.C語言結構變量的初始化
- 6.C語言結構體數組的定義
- 7.C語言指向結構體變量的指針
- 8.C語言指向結構體數組的指針
- 9.C語言結構體指針變量作函數參數
- 10.C語言動態存儲分配
- 11.C語言鏈表的概念
- 12.C語言枚舉類型
- 13.C語言類型定義符typedef
- 十二. 位運算
- 1.C語言位運算符詳解
- 2.C語言位域(位段)
- 3.關于位運算的總結
- 十三. 文件操作
- 1.C語言文件概述
- 2.C語言文件指針
- 3.C語言文件的打開與關閉
- 4.C語言文件的讀寫
- 5.C語言文件的隨機讀寫
- 6.C語言文件檢測函數
- 7.C語言庫文件(頭文件)有哪些
- 8.文件操作小結