- 相關(guān)推薦
C語言常量的類型
在C語言中,其值不能被改變的量稱為常量。常量有5種類型:整型常量、實型常量、字符常量、字符串常量和符號常量。下面一起來詳細看看!
(一)數(shù)值轉(zhuǎn)換
數(shù)字的四種表現(xiàn)形式:
、伲憾M制:所有數(shù)字由0,1構(gòu)成,逢二進一,二進制數(shù)中不會出現(xiàn)2.。
例:110101
、冢喊诉M制:以數(shù)字0(注意不是以字母O,o)開頭,所有數(shù)字由0~7構(gòu)成,逢八進一,八進制數(shù)中不會出現(xiàn)8。
例:0112,0123,077等
、郏菏M制:所有數(shù)字由0~9構(gòu)成,逢十進一,十進制數(shù)中不會出現(xiàn)10。
例:0,12,-15等
④:十六進制:以0x或者0X(數(shù)字0加字母x)開頭,所有數(shù)字由0~9,A~F(或者a~f)構(gòu)成,逢十六進一(其中A、B、C、D、E、F分別代表10、11、12、13、14、15)
例:0x4A、0X14c7等
在計算機內(nèi)部,數(shù)字均以二進制形式表示和存放,用戶輸入的普通十進制數(shù)字都要被計算機轉(zhuǎn)換成二進制才能在計算機內(nèi)部存儲,同樣計算機的運算結(jié)果也為二進制,一般要將其轉(zhuǎn)換成十進制數(shù)再輸出給用戶閱讀,這種轉(zhuǎn)換通常由計算機自動實現(xiàn)。
(1)將十進制轉(zhuǎn)換二進制、八進制和十六進制
除法:將十進制數(shù)除以2,記錄余數(shù),得到的商繼續(xù)除以2,直到商為0,然后將各次相處所得的余數(shù)從后往前逆序排列,所得余數(shù)數(shù)字序列就是該十進制數(shù)對應(yīng)的二進制數(shù)。八進制和十六進制轉(zhuǎn)換方法同上。
例:十進制數(shù)13轉(zhuǎn)換成二進制數(shù)的值為1101,轉(zhuǎn)換八進制為015,轉(zhuǎn)換成十六進制為D.
(2)將二進制、八進制和十六進制轉(zhuǎn)換成十進制
乘積求和:將二進制的每一位從低位到高位(右邊為低位,左邊為高位)分別乘以20,21,22。。。。,然后將這些積求和。
例如:(1101)2=(13)10 (317)8=(207)10 (23E)16=(574)10
(3)二進制與八進制、十六進制數(shù)之間的相互轉(zhuǎn)換
、伲憾M制轉(zhuǎn)八進制:從右往左每三位一組轉(zhuǎn)換成十進制數(shù),將所得數(shù)據(jù)組合就是對應(yīng)的八進制數(shù)(注意:高位不足三位補零)。
例:(010 110 111)2=(267)8
、冢憾M制轉(zhuǎn)十六進制:從右往左每四位一組轉(zhuǎn)換成十進制數(shù),將所得數(shù)據(jù)組合就是對應(yīng)的十六進制數(shù)(注意:高位不足四位補零)。
例:(0101 1011)2=(5B)16
③:八進制轉(zhuǎn)化二進制:每一位數(shù)字轉(zhuǎn)換為三位二進制數(shù)字
例:(13)8=(001 011)2=(1011)2
(注意:去掉前面的兩個00,因為0在高位沒有意義)
、埽菏M制轉(zhuǎn)化二進制:每一位數(shù)字轉(zhuǎn)換為四位二進制數(shù)字
例:(E3)16=(1110 0011)2
(二)整型常量
整型常量有3種形式:十進制整型常量、八進制整型常量和十六進制整型常量。
(注意:c語言中沒有直接表示二進制的整型常量,在c語言源程序中不會出現(xiàn)二進制。)
書寫方式如下:
十進制整型常量:123 , 0 ,-24 , 85L(長整型常量) 等
八進制整型常量:051 ,-026 ,0773 等
十六進制整型常量:0x55 , 0x1101 , 0x , 0x5AC0 , -0xFF。
其中L為長整型。
(三)實型常量
實型常量有兩種表示形式:小數(shù)形式和指數(shù)形式。
小數(shù)形式:5.4 0.074 -23.0
指數(shù)形式:5.4e0 4.3e-3 -3.3e4
(1)小數(shù)部分為0的實型常量,可以寫為453.0 或453。
(2)用小數(shù)表示時,小數(shù)點的兩邊必須有數(shù),不能寫成“ .453“和“453.“,而應(yīng)該寫成“0.453“和“453.0“。
(3)用指數(shù)寫法時,e前必須有數(shù)字,e后面的指數(shù)必須為整數(shù)(注意:整數(shù)階碼可以是正數(shù),負數(shù),也可以是八進制數(shù)、十六進制數(shù),但必須為整數(shù))。
(四)字符常量
字符常量的標志是一對單引號‘ ’,c語言中的字符常量有兩類:
(1)由一對單引號括起來的一個字符,如‘a(chǎn) ’, ‘r’ ,‘#’。注意: ′a′ 和 ′A′ 是兩個不同的字符常量。
(2)由一對單引號括起來,以反斜杠開頭,后跟若干數(shù)字或者字母,比如‘ ’,其中““是轉(zhuǎn)義的意思,后面跟不同的字符表示不同的意思,這類字符常量叫轉(zhuǎn)義字符。具體如圖所示 。
轉(zhuǎn)義字符 轉(zhuǎn)義字符的意義 ASCII碼
回車換行 10
橫向跳到下一制表位置 9
退格 8
回車 13
f 走紙換頁 12
反斜線符"" 92
' 單引號符 39
” 雙引號符 34
a 鳴鈴 7
ddd 1~3位八進制數(shù)所代表的字符
xhh 1~2位十六進制數(shù)所代表的字符
(五)字符串常量
C語言中,以雙引號括起來的,由若干個字符組成的序列即為字符串常量。
例:“ni hao” “happy”等等。
(六)符號常量
符號常量是由宏定義“#define“定義的常量,在C程序中可用標識符代表一個常量。
例:計算圓的面積的c程序。
#include
#define PI 3.14159
main()
{
float r,s;
r=12.5;
S=PI *r*r;
printf(“s= %f ”,s);
}
說明:
#define 是宏定義,此程序中所有出現(xiàn)PI的地方都代表3.14159,同時PI稱為符號常量。習(xí)慣上我們用大寫字母來表示符號常量,小寫字母表示變量,這樣比較容易區(qū)別。
【拓展內(nèi)容】
C語言變量理解
一、變量的概念
程序設(shè)計就是讓計算機按照一定的指令來進行工作,可以說數(shù)據(jù)的處理是程序設(shè)計的主要任務(wù)。那么數(shù)據(jù)是怎么加入到計算機的內(nèi)存中呢?計算機最初的功能就是能夠存儲數(shù)據(jù)并處理數(shù)據(jù)的機器。那么數(shù)據(jù)是怎么加入到計算機的內(nèi)存中呢?在學(xué)習(xí)程序設(shè)計之前,很多學(xué)生對計算機的硬件設(shè)施都大概已經(jīng)很熟悉了。計算機的硬件設(shè)施中有一個區(qū)域是用來存儲數(shù)據(jù)的,計算機在工作的過程中會頻繁的從這個區(qū)域讀入和讀出數(shù)據(jù)。要想讓計算機按照某些指令(程序)自動工作,首先必須把數(shù)據(jù)存儲到計算機的存儲空間中。在某種計算機語言中實現(xiàn)這種數(shù)據(jù)存儲功能的就是變量。變量就是計算機內(nèi)存中的某一個存儲單元。
二、變量的定義
C語言中變量在使用之前必須先對其進行定義,變量的定義的一般形式如下:【存儲類別】數(shù)據(jù)類型變量名;其中存儲類別是可以省略的。
1、存儲類別計算機的內(nèi)存一般分為三個部分:1)程序區(qū);2)靜態(tài)存儲區(qū);3)動態(tài)存儲區(qū);為了高效的發(fā)揮計算機的功能,不同類型的變量存放在不同的內(nèi)存區(qū)域。變量的存儲類別決定了變量中的數(shù)據(jù)在計算機內(nèi)存中的存儲位置。C語言中局部變量存放在動態(tài)存儲區(qū),全局變量或者靜態(tài)變量存放在靜態(tài)存儲區(qū)。
2、數(shù)據(jù)類型在用程序處理問題之前,首先必須確定用何種方式描述問題中所涉及到的數(shù)據(jù)。這個問題在C語言中是由數(shù)據(jù)類型來決定的。變量的本質(zhì)表現(xiàn)為在計算機中的存在時間和存儲空間。變量的數(shù)據(jù)類型是用來決定變量在計算機中占用內(nèi)存空間的大小。比如:整型數(shù)據(jù)在TC編譯系統(tǒng)中占用兩個字節(jié)的存儲空間。C語言變量的類型不僅確定了數(shù)據(jù)在計算機內(nèi)存中的存儲區(qū)域的大小,同時確定了該數(shù)據(jù)能夠參與的各種運算。任何一個C語言的變量必須有確定的數(shù)據(jù)類型,不管這個變量如何變化,變量的值都必須符合該變量數(shù)據(jù)類型的規(guī)定。
3、變量的名字通過以上介紹我們知道C語言中的變量就是計算機的某個存儲單元,假設(shè)你給某個變量賦予了一個數(shù)值,對變量的處理其實就是對這個數(shù)據(jù)的處理。那么計算機是如何快速準確的找到這個數(shù)據(jù)呢?計算機的內(nèi)存是以字節(jié)為單位進行劃分的。每個存儲單元都有自己的地址編號,就向賓館中房間的房間號一樣。計算機就是通過地址來準確的確定數(shù)據(jù)的存儲位置。但是對于程序員特別是非專業(yè)計算機人士,如果用計算機內(nèi)存地址記錄數(shù)據(jù)是非常難操作的。
為了更好的掌控變量,C語言規(guī)定可以給每個變量其一個容易識別的名字。這個名字的命名規(guī)則遵循C語言的標識符命名規(guī)則。C語言的變量名的命名在遵循C語言標識符規(guī)則的前提下,原則上可以是任意長度字符的組合。但是目前很多的C語言編譯系統(tǒng)只能識別前31個字符,如果兩個變量的前31個字符相同,則編譯系統(tǒng)會認為這兩個變量時同一個變量。為了避免這種混淆的出現(xiàn)最好避免使用多余31個字符的變量名。變量的理解變量就是計算機中的某個存儲單元。定義某個變量本質(zhì)上就是向計算機申請一些存儲區(qū)域。這個存儲區(qū)域的大小由變量的數(shù)據(jù)類型決定,這個存儲區(qū)域的位置有變量的存儲類類別決定。給變量賦予某個數(shù)值,其實就是向該變量對應(yīng)的存儲單元讀入數(shù)據(jù),對變量的處理就是對這個存儲單元中的數(shù)據(jù)的處理。并且這個存儲單元中的數(shù)據(jù)在程序的運行期間是可以發(fā)生變化的。
C語言跳出循環(huán)
使用while或for循環(huán)時,如果想提前結(jié)束循環(huán)(在不滿足結(jié)束條件的情況下結(jié)束循環(huán)),可以使用break或continue關(guān)鍵字。
break關(guān)鍵字
在《C語言switch語句》一節(jié)中,我們講到了break,用它來跳出 switch 語句。
當 break 關(guān)鍵字用于 while、for 循環(huán)時,會終止循環(huán)而執(zhí)行整個循環(huán)語句后面的代碼。break 關(guān)鍵字通常和 if 語句一起使用,即滿足條件時便跳出循環(huán)。
使用 while 循環(huán)計算1加到100的值:
#includeint main(){ int i=1, sum=0; while(1){ //循環(huán)條件為死循環(huán) sum+=i; i++; if(i>100) break; } printf("%d ", sum); return 0;}
運行結(jié)果:
5050
while 循環(huán)條件為 1,是一個死循環(huán)。當執(zhí)行到第100次循環(huán)的時候,計算完i++;后 i 的值為 101,此時 if 語句的條件 i> 100 成立,執(zhí)行break;語句,結(jié)束循環(huán)。
在多層循環(huán)中,一個 break 語句只向外跳一層。例如,輸出一個4*4的整數(shù)矩陣:
#includeint main(){ int i=1, j; while(1){ // 外層循環(huán) j=1; while(1){ // 內(nèi)層循環(huán) printf("%-4d", i*j); j++; if(j>4) break; //跳出內(nèi)層循環(huán) } printf(" "); i++; if(i>4) break; // 跳出外層循環(huán) } return 0;}
運行結(jié)果:
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
當 j>4 成立時,執(zhí)行break;,跳出內(nèi)層循環(huán);外層循環(huán)依然執(zhí)行,直到 i>4 成立,跳出外層循環(huán)。內(nèi)層循環(huán)共執(zhí)行了4次,外層循環(huán)共執(zhí)行了1次。
continue語句
continue 語句的作用是跳過循環(huán)體中剩余的語句而強制進入下一次循環(huán)。continue語句只用在 while、for 循環(huán)中,常與 if 條件語句一起使用,判斷條件是否成立。
來看一個例子:
#includeint main(){ char c = 0; while(c!=' '){ //回車鍵結(jié)束循環(huán) c=get); if(c=='4' || c=='5'){ //按下的是數(shù)字鍵4或5 continue; //跳過當次循環(huán),進入下次循環(huán) } putc); } return 0;}
運行結(jié)果:
0123456789↙
01236789
程序遇到while時,變量c的值為'',循環(huán)條件c!=' '成立,開始第一次循環(huán)。get) 使程序暫停執(zhí)行,等待用戶輸入,直到用戶按下回車鍵才開始讀取字符。
本例我們輸入的是 0123456789,當讀取到4或5時,if 的條件c=='4'||c=='5'成立,就執(zhí)行 continue 語句,結(jié)束當前循環(huán),直接進入下一次循環(huán),也就是說putc);不會被執(zhí)行到。而讀取到其他數(shù)字時,if 的條件不成立,continue 語句不會被執(zhí)行到,putc);就會輸出讀取到的字符。
break與continue的對比:break 用來結(jié)束所有循環(huán),循環(huán)語句不再有執(zhí)行的機會;continue 用來結(jié)束本次循環(huán),直接跳到下一次循環(huán),如果循環(huán)條件成立,還會繼續(xù)循環(huán)。
C語言優(yōu)缺點
1. 簡潔緊湊、靈活方便
C語言一共只有32個關(guān)鍵字,9種控制語句,程序書寫形式自由,主要用小寫字母表示。它把高級語言的基本結(jié)構(gòu)和語句與低級語言的實用性結(jié)合起來。 C 語言可以像匯編語言一樣對位、字節(jié)和地址進行操作,而這三者是計算機最基本的工作單元。
2. 運算符豐富
C語言的運算符包含的范圍很廣泛,共有34種運算符。C語言把括號、賦值、強制類型轉(zhuǎn)換等都作為運算符處理。從而使C語言的運算類型極其豐富,表達式類型多樣化。靈活使用各種運算符可以實現(xiàn)在其它高級語言中難以實現(xiàn)的運算。
3. 數(shù)據(jù)結(jié)構(gòu)豐富
C語言的數(shù)據(jù)類型有:整型、實型、字符型、數(shù)組類型、指針類型、結(jié)構(gòu)體類型、共用體類型等。能用來實現(xiàn)各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的運算。并引入了指針概念,使程序效率更高。另外C語言具有強大的圖形功能,支持多種顯示器和驅(qū)動器。且計算功能、邏輯判斷功能強大。
4. C是結(jié)構(gòu)式語言
結(jié)構(gòu)式語言的顯著特點是代碼及數(shù)據(jù)的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦,便于使用、維護以及調(diào)試。C語言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便的調(diào)用,并具有多種循環(huán)、條件語句控制程序流向,從而使程序完全結(jié)構(gòu)化。
5.C語法限制
C語法限制不太嚴格,程序設(shè)計自由度大 雖然C語言也是強類型語言,但它的語法比較靈活,允許程序編寫者有較大的自由度
6. C語言允許直接訪問物理地址,可以直接對硬件進行操作
由于C語言允許直接訪問物理地址,可以直接對硬件進行
c語言鏈接程序
由匯編程序生成的目標文件并不能立即就被執(zhí)行,其中可能還有許多沒有解決的問題。例如,某個源文件中的函數(shù)可能引用了另一個源文件中定義的某個符號(如變量或者函數(shù)調(diào)用等);在程序中可能調(diào)用了某個庫文件中的函數(shù),等等。所有的這些問題,都需要經(jīng)鏈接程序的處理方能得以解決。
鏈接程序
鏈接程序的主要工作就是將有關(guān)的目標文件彼此相連接,也即將在一個文件中引用的符號同該符號在另外一個文件中的定義連接起來,使得所有的這些目標文件成為一個能夠誒操作系統(tǒng)裝入執(zhí)行的統(tǒng)一整體。
根據(jù)開發(fā)人員指定的同庫函數(shù)的鏈接方式的不同,鏈接處理可分為兩種:
(1)靜態(tài)鏈接
在這種鏈接方式下,函數(shù)的代碼將從其所在地靜態(tài)鏈接庫中被拷貝到最終的可執(zhí)行程序中。這樣該程序在被執(zhí)行時這些代碼將被裝入到該進程的虛擬地址空間中。靜態(tài)鏈接庫實際上是一個目標文件的集合,其中的每個文件含有庫中的一個或者一組相關(guān)函數(shù)的代碼。
(2)動態(tài)鏈接
在此種方式下,函數(shù)的代碼被放到稱作是動態(tài)鏈接庫或共享對象的某個目標文件中。鏈接程序此時所作的只是在最終的可執(zhí)行程序中記錄下共享對象的名字以及其它少量的登記信息。在此可執(zhí)行文件被執(zhí)行時,動態(tài)鏈接庫的全部內(nèi)容將被映射到運行時相應(yīng)進程的虛地址空間。動態(tài)鏈接程序?qū)⒏鶕?jù)可執(zhí)行程序中記錄的信息找到相應(yīng)的函數(shù)代碼。
對于可執(zhí)行文件中的函數(shù)調(diào)用,可分別采用動態(tài)鏈接或靜態(tài)鏈接的方法。使用動態(tài)鏈接能夠使最終的可執(zhí)行文件比較短小,并且當共享對象被多個進程使用時能節(jié)約一些內(nèi)存,因為在內(nèi)存中只需要保存一份此共享對象的代碼。但并不是使用動態(tài)鏈接就一定比使用靜態(tài)鏈接要優(yōu)越。在某些情況下動態(tài)鏈接可能帶來一些性能上損害。
【C語言常量的類型】相關(guān)文章:
C語言入門知識:常量08-31
C語言常量入門學(xué)習(xí)06-05
C語言變量的類型10-30
c語言引用類型和值類型09-07
C語言的指針類型解析09-14
C語言指針變量的類型07-31
C語言基本類型09-07
C語言的指針類型詳解05-21
C語言的指針類型講解11-02