C語言整型數據分析
不同類型的量可以參與運算並相互賦值。其中的類型轉換是由編譯系統自動完成的。以下是小編為大家搜索整理的C語言整型數據分析,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!
整型數據即整數。
整型數據的分類
整型數據的一般分類如下:
基本型:類型説明符為int,在內存中佔2個字節。
短整型:類型説明符為short int或short。所佔字節和取值範圍均與基本型相同。
長整型:類型説明符為long int或long,在內存中佔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
整型數據在內存中的存放形式
如果定義了一個整型變量i:
int i;
i=10;
數值是以補碼錶示的:
正數的補碼和原碼相同;
負數的補碼:將該數的絕對值的二進制形式按位取反再加1。
例如:求-10的補碼:
由此可知,左面的第一位是表示符號的。
各種無符號整型數據所佔的內存空間字節數與相應的有符號類型量相同。但由於省去了符號位,故不能表示負數。
以13為例:
整型數據的表示方法
上面講到的整數,都是十進制。在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) 整數的後綴
可以用後綴“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。
幾個整型變量的定義:
int a,b,c; // a,b,c為整型變量
long x,y; // x,y為長整型變量
unsigned p,q; // p,q為無符號整型變量
【例3-2】整型變量的定義與使用。
#include
int 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=%dn",c,d);
return 0;
}
整型數據的溢出
【例3-3】整型數據的溢出。
#include
int main(){
int a,b;
a=32767;
b=a+1;
printf("%d,%dn",a,b);
return 0;
}
注意:以上結果是在TC2.0下得出的;在VC6.0下,輸出值是 32767, 32768。因為 int 類型在 TC2.0下默認是short int,佔2個字節,在VC6.0下默認是 long int,佔4個字節,32768不會導致溢出。將 a = 32767 改成 a = 2147483647 後即可看到溢出。
【例3-4】不同類型變量賦值
#include
int 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=%dn",c,d);
return 0;
}
從程序中可以看到:x、y是長整型變量,a、b是基本整型變量。它們之間允許進行運算,運算結果為長整型。但c、d被定義為基本整型,因此最後結果為基本整型。
-
C語言入門知識:位運算
導語:C語言作為一門非常適合編程入門的語言,打好基礎的重要性不言而喻。下面是其位運算的相關知識,歡迎閲讀:一、位運算符在計算機中,數據都是以二進制數形式存放的,位運算就是指對存儲單元中二進制位的運算。C語言提供6種位運算符。二、位運算位運算符&|~<<>>∧...
-
C語言自學入門技巧
學習C語言不是一朝一夕的事情,但也不需要花費很長的時間才能精通。下面小編就為大家介紹一下C語言自學入門技巧吧!C語言自學入門技巧11、程語語言其實是一個很初級的工具,但是又必須熟練的掌握它,學懂一門編程語言就好像學會了寫字,但是會寫字的人不見得會寫文章,而...
-
C/C++變量在內存中的分佈介紹
變量在內存地址的分佈為:堆-棧-代碼區-全局靜態-常量數據。同一區域的各變量按聲明的順序在內存的中依次由低到高分配空間(只有未賦值的全局變量是個例外)。本文是本站小編搜索整理的關於C/C++變量在內存中的分佈介紹,感興趣的朋友一起學習吧!!想了解更多相關信息...
-
內部排序之堆排序的實現
堆排序(HeapSort)只需要一個記錄大小的輔助空間,每個待排序的記錄僅佔有一個存儲空間。下面小編為大家整理了內部排序之堆排序的實現,希望能幫到大家!(1)基本概念a)堆:設有n個元素的序列:{k1,k2,...,kn}對所有的i=1,2,...,(int)(n/2),當滿足下面關係:ki≤k2i,ki≤k2i+1或ki...