- 零基礎(chǔ)學(xué)單片機C語言程序設(shè)計
- 趙建領(lǐng) 薛園園等編著
- 2122字
- 2018-12-31 21:41:35
3.5 C51的常量類型
常量也是C51中常用的數(shù)據(jù)形式。與變量的表示相比,常量的表示要相對簡單,但是同樣要注意表示的規(guī)范,否則會導(dǎo)致程序出錯。C51中的常量有整型常量、浮點型常量、字符型常量和轉(zhuǎn)義字符4種類型。下面分別對其進行介紹。
3.5.1 整型常量
整型數(shù)據(jù)包括整型變量和整型常量兩種,整型變量的定義前面已經(jīng)詳細介紹。整型常量及整型常數(shù)可以表示十進制、八進制、十六進制的整數(shù)值。根據(jù)表示的數(shù)的進制不同進行區(qū)分,整型常量的表示如表3.4所示。
表3.4 整型常量的表示

說明
整型常量表示十六進制數(shù)時,其中的引導(dǎo)符0是必須有的,字母X既可用大寫也可用小寫,含義相同。
在整型常量后添加一個字母“L”或“l(fā)”時,表示該數(shù)為長整型數(shù)。例如23L、0713L、0Xfd4l等。整型常量在不加特別說明時總是正值。如果需要的是負值,則必須將負號“-”放置于常量表達式的最前面,例如-0x56、-09。整型常量在程序中的使用,示例如下。
#include <stdio.h> //頭文件 void main() //主函數(shù) { int a,b,c; //定義變量 a=12; //十進制常量賦值給a b=012; //八進制常量賦值給b c=0x12; //十六進制常量賦值給c printf("a=%d,b=%d,c=%d\n",a,b,c); //輸出十進制數(shù)據(jù) printf("a=%o,b=%o,c=%o\n",a,b,c); //輸出八進制數(shù)據(jù) printf("a=%x,b=%x,c=%x\n",a,b,c); //輸出十六進制數(shù)據(jù) }
這段程序可在Keil μ Vision3集成開發(fā)環(huán)境中運行,執(zhí)行結(jié)果如下。
a=12,b=10,c=18 a=14,b=12,c=22 a=c,b=a,c=12
在該程序中,先聲明了整型變量a、b和c。接著分別將十進制常量賦值給a,將八進制常量賦值給b,將十六進制常量賦值給c。最后,分別按照十進制、八進制和十六進制的格式輸出。
3.5.2 浮點型常量
浮點型常量也稱為實型常量,只可以用十進制來表示。一般來說,浮點型常量的值由整數(shù)部分、尾數(shù)部分和指數(shù)部分組成。在不加說明的情況下,浮點型常量通常為正值。如果需要表示負值,則在常量前使用負號,如18.47、-45.63、-4.2e-16、8.165。
在C51中,所有浮點常量都被默認為float型。對于絕對值小于1的浮點型常量,其小數(shù)點前面的零可以省略。例如0.68可寫為.68,-0.0314E-4可寫為-.0314E-4。
在編譯環(huán)境中,默認的輸出格式為浮點數(shù)時,最多只保留小數(shù)點后六位,不夠的后面補零。在浮點型常量中不得出現(xiàn)任何空白符號。字母E或e之前必須有數(shù)字,其表示形式為“數(shù)字e±數(shù)字”,且浮點型常量中E或e后面的指數(shù)必須是整數(shù),例如“e2.3”、“e -2.5”等都是不合法的指數(shù)形式。
浮點型常量在程序中的使用,示例如下:
#include <stdio.h> //頭文件 void main() //主函數(shù) { float a,b,c; //浮點型變量 a=1.2; //賦值 b=.27; c=1.7E-4; printf("a=%f,b=%f,c=%f\n",a,b,c); //輸出結(jié)果 printf("%f",2.31); while(1); }
這段程序可在Keil μ Vision3集成開發(fā)環(huán)境中運行,執(zhí)行結(jié)果如下。
a=1.200000,b=0.270000,c=0.000170 2.310000
在該程序中,先聲明了浮點型變量a、b和c。接著分別將浮點型常量賦值給a、b和c。最后輸出各個浮點型數(shù)據(jù),其中還使用了printf語句來直接輸出浮點型常量。
3.5.3 字符型常量
字符型常量用來表示單個字符,其用一對單引號括起來。其中單引號只起定界作用,并不表示字符本身,例如'F','5','?'。在C51中,字符常量的單引號中的字符不能是單引號(')或反斜杠(\)。如果需要使用這兩個字符,則需要采用轉(zhuǎn)義字符來表示,這將在后面的內(nèi)容中進行介紹。
在C51中,字符是按其所對應(yīng)的ASCII碼值來存儲的,一個字符占一個字節(jié)。因此也可用該字符的ASCII碼值來表示該字符,例如十進制數(shù)65表示大寫字母'A',十六進制數(shù)0x5d表示符號']',八進制數(shù)0110表示大寫字母'B'等。
另外,格式控制符是無法在程序中顯式地表示的。因此,這些格式控制字符不能用符號表示,但可以用ASCII碼值來表示。例如,十進制數(shù)13表示回車符,八進制數(shù)033表示Esc,十六進制數(shù)0x0A表示換行符等。
由于C51語言中,字符常量和整型數(shù)據(jù)(short型)具有相同的取值范圍,所以字符常量可以像整型數(shù)據(jù)一樣在程序中進行相關(guān)的運算,示例如下。
'5'-5; //執(zhí)行結(jié)果53-5 = 48 'B'+32; //執(zhí)行結(jié)果66+32 = 98 'b'-32 ; //執(zhí)行結(jié)果98-32 = 66
注意
這里值得強調(diào)的是字符'8'和數(shù)字8的區(qū)別,前者是字符常量,后者是整型常量,它們的含義和在計算機中的存儲方式都截然不同。
字符常量的表示以及字符常量的運算程序示例如下。
#include <stdio.h> //頭文件 void main() //主函數(shù) { char c1,c2; //定義字符變量 c1='A'; //賦值 c2='B'; c1=c1+32; //轉(zhuǎn)換大小寫 c2=c2+32; printf("c1=%c\nc2=%c",c1,c2); //輸出結(jié)果 }
這段程序可在Keil μ Vision3集成開發(fā)環(huán)境中運行,執(zhí)行結(jié)果如下。
c1=a c2=b
本例是將兩個大寫字母轉(zhuǎn)換為小寫字母。因為'a'的ASCII碼為97,而'A'為65,'b'的ASCII碼為98,'B'則為66。從ASCII代碼表中可以看到每一個小寫字母比大寫字母的ASCII碼大32,即'a'='A'+32。
3.5.4 轉(zhuǎn)義字符
轉(zhuǎn)義字符用于表示ASCII碼字符集中的格式控制字符和特定功能字符,這些字符都是不可打印的。例如,用于表示字符常量的單引號('),用于表示字符串常量的雙引號(")和反斜杠(\)等。轉(zhuǎn)義字符是C51語言中一種特殊的字符表示形式,用反斜杠“\”后面加一個字符或一個八進制或十六進制數(shù)表示,轉(zhuǎn)義字符的表示如表3.5所示。
表3.5 轉(zhuǎn)義字符

如果需要在字符常量中使用單引號和反斜杠時,都必須使用轉(zhuǎn)義字符表示,即在這些字符前加上反斜杠,例如“\'”、“\\”。
使用轉(zhuǎn)義字符時需要注意以下幾點。
?在C51程序中,不可打印字符必須用轉(zhuǎn)義字符來表示。
?轉(zhuǎn)義字符中只能使用小寫字母來表示,每個轉(zhuǎn)義字符只能看作一個字符。例如“\T”是錯誤的轉(zhuǎn)義字符。
?“\v”垂直制表和“\f”換頁符在屏幕顯示時沒有任何影響,但是在打印輸出時,會影響到打印機的操作。
?在C51中,可以使用轉(zhuǎn)義字符“\ddd”表示任意字符。其中,“\ddd”為斜杠后面跟三位八進制數(shù),該三位八進制數(shù)的值即為對應(yīng)的八進制ASCII碼值。
?在C51中,可以使用轉(zhuǎn)義字符“\xhh”表示任意字符。其中,“\x”后面跟兩位十六進制數(shù),該兩位十六進制數(shù)為對應(yīng)字符的十六進制ASCII碼值。
- 基于粒計算模型的圖像處理
- 微服務(wù)設(shè)計原理與架構(gòu)
- 云原生Spring實戰(zhàn)
- 精通Python自動化編程
- Java面向?qū)ο蟪绦蛟O(shè)計
- 第一行代碼 C語言(視頻講解版)
- Vue.js 2 Web Development Projects
- Getting Started with Python and Raspberry Pi
- Python 3.7從入門到精通(視頻教學(xué)版)
- App Inventor 2 Essentials
- 交互設(shè)計師成長手冊:從零開始學(xué)交互
- Keil Cx51 V7.0單片機高級語言編程與μVision2應(yīng)用實踐
- 大象:Thinking in UML(第二版)
- 亮劍Java Web項目開發(fā)案例導(dǎo)航
- Learning WebRTC