當前位置:首頁 > 單片機 > 單片機
[導讀]常量和符號常量在程序運行過程中,其值不能被改變的量稱之為常量。常量分為不同的類型,有整型常量如 1、2、3、100;浮點型常量 3.14、0.56、-4.8;字符型常量?a?、?b?、?0?;字符串常量“a”、“abc”、“1234”、“

常量和符號常量


在程序運行過程中,其值不能被改變的量稱之為常量。常量分為不同的類型,有整型常量如 1、2、3、100;浮點型常量 3.14、0.56、-4.8;字符型常量?a?、?b?、?0?;字符串常量“a”、“abc”、“1234”、“1234abcd”等。


細心的同學會發(fā)現,整型和浮點型常量我們直接寫的數字,而字符型常量用單引號來表示一個字符,用雙引號來表示一個字符串,尤其大家要注意?a?和“a”是不一樣的,這個等會我們要詳細介紹。


常量一般有兩種表現形式:

直接常量:直接以值的形式表示的常量稱之為直接常量。上述舉例這些都是直接常量,直接寫出來了。

符號常量:用標識符命名的常量稱之為符號常量,就是為上面的直接常量再取一個名字。使用符號常量一是方便理解,提高程序可讀性,更重要的是方便程序的后續(xù)維護,習慣上符號常量我們都用大寫字母和下劃線來命名。


比如,我們可以把 3.14 取名為 PI(即π)。再比如,我們上節(jié)課的串口程序,我們用的波特率是 9600,如果用符號常量來進行提前聲明的話,那我們要修改成其它速率的話,就不用在程序中找 9600 修改了,直接修改聲明處就可以了,兩種方法舉例說明。用 const 聲明。比如我們在程序開始位置定義一個符號常量 BAUD。


定義形式是:

const 類型 符號常量名字=常量值;

const unsigned int BAUD = 9600; /*注意結尾有個分號*/

我們就可以在程序中直接把 9600 改成 BAUD,這樣我們如果要改波特率的話,直接在程序開頭位置改一下這個值就可以了。用預處理命令#define 來完成,預處理命令我們先來認識#define。


定義形式是:

#define 符號常量名 常量值

#define BAUD 9600 /*注意結尾沒有分號*/

這樣定義以后,只要在程序中出現 BAUD 的話,意思就是完全替代了后邊的 9600 這個數字。


不知大家是否記得,我們之前定義數碼管真值表的時候,用了一個 code 關鍵字。

unsigned char code LedChar[] = { //數碼管顯示字符轉換表

0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,

0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E

};

我們當時說加了 code 之后,這個真值表的數據只能被使用,不能被改變,如果我們直接寫 LedChar[0] = 1;這樣就錯了。實際上 code 這個關鍵字是 51 單片機特有的,如果是其它類型的單片機我們只需要寫成 const unsigned char LedChar[]={}就可以了,自動保存到 FLASH里,而 51 單片機只用 const 而不加 code 的話,這個數組會保存到 RAM 中,而不會保存到FLAHS 中,鑒于此,在 51 這個體系下,const 反倒變得不那么重要了,它的作用被 code 取代了,這里大家知道這么回事即可。


我們來對各種類型的常量做進一步說明。


整型常量和浮點型常量就沒多少可說的了,之前我們應用的都很熟練了,整型直接寫數字就是十進制如 128,前邊 0x 開頭的表示是十六進制 0x80,浮點型直接寫帶小數點的數據就可以了。


字符型常量是由一對單引號括起來的單個字符。它分為兩種形式,一種是普通字符,一種是轉義字符。


普通字符就是那些我們可以直接書寫直接看到的有形的字符,比如阿拉伯數字 0~9,英文字符 A~z,以及標點符號等。它們都是 ASCII 碼表中的字符,而它們在單片機中都占用一個字節(jié)的空間,其值就是對應的 ASCII 碼值。比如?a?的值是 97,?A?的值是 65,?0?的值是48,如果定義一個變量 unsigned char a = ?a?,那么變量 a 的值就是 97。


除了上述這些字符之外,還有一些特殊字符,它們一些是無形的,像回車符、換行符這些都是看不到的,還有一些像?”這類字符它們已經有特殊用途了,想象一下如果寫 '''覺得編譯器會怎么去解釋呢。針對這些特殊符號,為了可以讓它們正常進入到我們的程序代碼中,C 語言就規(guī)定了轉義字符,它是以反斜杠()開頭的特定字符序列,讓它們來表示這些特殊字符,比如我們用n 來代表換行。我們用一個簡單表格來說明一下常用的轉義字符的意思,如表 12-2 所示。


表 12-2 常用轉義字符及含義

字符形式含義

n換行

t橫向跳格(相當于 Tab)

v豎向跳格

b退格

r光標移到行首

\反斜杠字符??

?單引號字符

”雙引號字符

f走紙換頁