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

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

如果需要在字符常量中使用單引號和反斜杠時,都必須使用轉義字符表示,即在這些字符前加上反斜杠,例如“\'”、“\\”。
使用轉義字符時需要注意以下幾點。
?在C51程序中,不可打印字符必須用轉義字符來表示。
?轉義字符中只能使用小寫字母來表示,每個轉義字符只能看作一個字符。例如“\T”是錯誤的轉義字符。
?“\v”垂直制表和“\f”換頁符在屏幕顯示時沒有任何影響,但是在打印輸出時,會影響到打印機的操作。
?在C51中,可以使用轉義字符“\ddd”表示任意字符。其中,“\ddd”為斜杠后面跟三位八進制數,該三位八進制數的值即為對應的八進制ASCII碼值。
?在C51中,可以使用轉義字符“\xhh”表示任意字符。其中,“\x”后面跟兩位十六進制數,該兩位十六進制數為對應字符的十六進制ASCII碼值。