整型量包括整型常量、整型變量。
整型常量就是整常數。在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 在數值上並無區別。但對158L,因為是長整型量,C編譯系統將為它分配4個字節存儲空間。而對158,因為是基本整型,只分配2 個字節的存儲空間。因此在運算和輸出格式上要予以注意,避免出錯。
無符號數也可用後綴表示,整型常數的無符號數的後綴為“U”或“u”。例如:358u、0x38Au、235Lu均為無符號數。
前綴,後綴可同時使用以表示各種類型的數。如0XA5Lu表示十六進制無符號長整數A5,其十進制為165。
1) 整型數據在內存中的存放形式
如果定義了一個整型變量i:
int i; i=10;
數值是以補碼表示的:
例如:求-10的補碼:
由此可知,左面的第一位是表示符號的。
2) 整型變量的分類
無符號型又可與上述三種類型匹配而構成:
各種無符號類型量所占的內存空間字節數與相應的有符號類型量相同。但由於省去了符號位,故不能表示負數。
下表列出了C語言中各類整型量所分配的內存字節數及數的表示范圍。
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被定義為基本整型,因此最後結果為基本整型。本例說明,不同類型的量可以參與運算並相互賦值。其中的類型轉換是由編譯系統自動完成的。有關類型轉換的規則將在以後介紹