您好,歡迎進入深圳市穎特新科技有限公司官方網站!
重要程度:★★★★
在C語言中,有三種基本的數據類型,它們是整型、實型和字符型。
1、數制轉換
二進制的數,基為二,某位出現的最大數字是2-1=1;
八進制的數,基為八,某位出現的最大數字是8-1=7;
十六進制的數,基為十六,某位出現的最大數字是f(相當與十進制的15)。在十六進制中,數字由十六個代碼組成,分別是0~9和A~F(或者是a~f)這十六個代碼。
表1列舉出十進制數字從0~15時,相應的二進制、八進制和十六進制數字。(同列的為一組,表示相同的值)
表1 十進制、二進制、八進制和十六進制對照表
十進制 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
二進制 |
0 |
1 |
10 |
11 |
100 |
101 |
110 |
111 |
八進制 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
十六進制 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
|
||||||||
十進制 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
二進制 |
1000 |
1001 |
1010 |
1011 |
1100 |
1101 |
1110 |
1111 |
八進制 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
十六進制 |
8 |
9 |
A |
B |
C |
D |
E |
F |
十進制的數字在我們日常生活中普遍使用,然而在計算機內部,數字均以二進制形式表示和存放。引例:
(1)將任意進制的數轉換為十進制數:
將這個數按照引例中的方法展開。注意底數使用的是該進制的基。
使用以上的方法,我們再來看兩個例子:
(23E)16 = 2×162 + 3×161 + 14×160 =(574)10
(111)2 = 1×22+1×21+1×20 = 23-1 = (7)10
(2)將十進制數轉換成任意進制數
十進制數轉換成二進制數的規(guī)則為:將十進制的數字除以2,得到的商數繼續(xù)除以2,直到商為0,然后將各次相除所得的余數從后往前排列,就得到該十進制數轉換成的對應的二進制數。例如,將十進制數13轉換成二進制數的過程如下:
2 | 1 3
2 | 6 …………1
2 | 3 …………0
2 | 1 …………1
0 …………1
所得的余數從后往前排列,得到二進制數1101,與表1中的一致。
同理,可以得出將十進制數轉換為任意進制數的規(guī)則。例如,將十進制數13轉換成八進制數的過程如下:
8 | 1 3
8 | 1 …………5
0 …………1
所得的余數從后往前排列,得到二進制數15,與表1中的一致。
(3)二進制與八進制、十六進制之間的轉換
從表1中可以看出,每個八進制數的單個數字都可以用三位二進制數來表示,最大的八進制單個數字7等于最大的三位二進制111,最小的八進制單個數字0等于最小的三位二進制000。因此,每個八進制數的單個數字都可以用三位二進制數字來表示,即23=8。同樣,每個十六進制數的單個數字都可以用四位二進制數來表示,即24=16。
例如,將八進制數13轉換成二進制數的過程如下:
(1 3)8 = (001 011)2
從以上的轉換過程看出,將每個八進制數字轉換成了三位二進制數字,1轉換成001,3轉換成011,因此八進制13對應的二進制數字為1011。
現舉例說明將十六進制數數E3轉換成二進制數的過程:
(E 3)16 = (1110 0011)2
從表1可以看出,十六進制數字E等于二進制的1110,3等于二進制的0011,于是十六進制數字E3等于二進制數字11100011。
反過來,將二進制轉換成八進制、十六進制,只需將從右邊起的每三位或者每四位二進制數轉換成對應的八進制數或十六進制數。
進制的常見錯誤:
1. 八進制數據中出現8,甚至是9.
2. 十六進制中,把15當成一個字符(實際上應該是f)。
2、整型常量
(1)十進制整型常量由一串連續(xù)的0~9數字組成。如:0、120、365、-12等。
(2)八進制整型常量以數字0開頭,其中的數字為0~7。如:0112(十進制74)、0123(十進制83)、077(十進制63)等。
(3)十六進制整型常量以0x(數字0和字母x)或0X開頭,其中的數字可以是0~9、a~f或A~F中的數字或英文字母。如:0x11(十進制17)、0xa5(十進制165)、0X5a(十進制90)等。
整型常量又分為短整型(short int)、基本整型(int)、長整型(long int)和無符號整型(unsigned)等幾類。
例1: 以下選項中可作為C語言合法整數的是
A) 10110B B) 0386 C) 0Xffa D) x2a2
分析:本題答案為C。
選項(A)不是C語言中三種整型常量之一。
選項(B)不是合法的八進制整型常量,因為八進制整型常量中不可能出現“8”字符。
選項(D)中x2a2前加上“0”就是一個合法的十六進制整型常量。
3、整型變量
整型變量是用于存放整型值的變量。對應于整型常量,整型變量也可分為短整型(short int)、基本整型(int)、長整型(long int)和無符號整型(unsigned)四種。
定義基本整型變量用關鍵字int,形式如下:
int i;
int類型所占據的字節(jié)長度因不同類型的機器或編譯器而有所不同:
如果使用VC++6.0,則會為int型變量分配4個字節(jié)長度的存儲單元。我們使用的將是這種情況。
如圖1所示。圖中表示對定義的int型整型變量i分配了四個字節(jié)的存儲單元,這個存儲單元的名字為i,里面的內容不確定。
|
|
|
|
圖1 計算機系統(tǒng)為整型變量i分配的內存空間
當對變量i賦值時,這個值就存儲在這個存儲單元中。
例如,執(zhí)行了賦值語句:
i=6;
則變量i的存儲單元變?yōu)槿鐖D2所示的情況。
00000000 |
00000000 |
00000000 |
00000110 |
圖2 十進制整數6存放在變量i的內存空間中的形式
正如讀者所知,在計算機中實際上是以二進制形式存儲數據的,所以在變量i的存儲單元中存放的是四個字節(jié)的二進制數00000000 00000000 00000000 00000110(十進制6)。
C語言中規(guī)定,在定義變量的同時給變量賦初值,稱為變量初始化。例如:
main( )
{ int a=2,b=3,c=4;
……
}
表2 不同類型的整型數在內存中所占用的字節(jié)數和數值范圍
數據類型 |
關鍵字 |
占用的字節(jié)數 |
數值范圍 |
短整型 |
[signed] short [int] |
2 |
-32768~32767 |
無符號短整型 |
unsigned short [int] |
2 |
0~65535 |
基本整型 |
[signed] int |
4 |
-2147483648~2147483647 |
無符號整型 |
unsigned [int] |
4 |
0~4294967295 |
長整型 |
[signed] long [int] |
4 |
-2147483648~2147483647 |
無符號長整型 |
unsigned long [int] |
4 |
0~4294967295 |
說明:
1) 如果要表示一個長整型常量,則應該在對應的整型常量后面加上一個字母后綴l(L的小寫)或者是L。如0L、110L、123L等。這是因為如果不加上L(或l),則表明這個整型常量為基本整型常量,在內存中占兩個字節(jié)的存儲單元,而加上之后,則表明為長整型常量,在內存中占四個字節(jié)存儲單元。
2)無論是短整型還是長整型常量,C語言系統(tǒng)都默認為是有符號整數。無符號整數在數字的后面加上一個字母后綴u或者是U。若是長整型無符號整型常量,則應該加后綴lu或者是LU。
例2: 以下選項中不屬于C語言的類型的是
A) signed short int B) unsigned long int
C) unsigned int D) long short
分析:根據表2可知,正確答案為D。
4、整數在內存中的存儲形式
在計算機內存中最小存儲單位稱為“位(bit)”。每一個位中或者存放0,或者存放1,因此稱為二進制位。一個字節(jié)(Byte)有8個二進制位。沿用慣例,把最右邊一位稱為最低位,把最左邊一位稱為最高位。在C語言中,對于有符號型整數,將最高位作為符號位,當最高位為0時表示正整數,當最高位為1時表示負整數。
下面介紹整數的存儲形式。
注意:計算機中(或者說內存中)的數據都以它對應的補碼形式存在。
下一篇:(二)啟動代碼分析 01