1. 程式人生 > >C++中的常量的基礎知識

C++中的常量的基礎知識

常量:指在程式執行過程中值不改變的量。常量有兩種表示形式,即字面常量和符號常量。字面常量的型別是根據書寫形式來區分的,例如15,-2.2,'a',"hello"等都是字面常量,它們的型別分別為:整型、浮點型、字元型、字串型,每個字面常量的字面本身就是它的值。符號常量是一個識別符號,在程式中必須遵循“先宣告,後使用”的原則。

》邏輯常量

邏輯型別的取值只包含兩個取值:true和false,它們稱為邏輯常量。

bool b=(x==y);

如果x與y相等,則b的值為true;否則b的值為false。邏輯常量主要用在邏輯運算中。此外,由於邏輯值對應著整數1或0,所以它也能夠像其他整數一樣出現在表示式中,參與各種整數運算。

》字元常量

簡稱字元,它以單引號作為起止符號,中間有一個或若干個字元。

例       ‘a’ 單引號中間有一個字元,這是一般意義上的字元常量;

           ‘\n’,'\146','\x6E'等以“\”開頭的包括多個字元的字元序列也都是符合規定的字元常量。

但是,無論字元常量包含一個還是多個字元,每個字元常量只能表示一個字元,當字元常量的一對單引號內多於一個字元時,則將按照一定的規則解釋為一個字元。

》轉義字元

計算機中常用的ASCII字元也是字元型的資料,因為ASCII碼值在0~127之間,正好落在字元型資料的取值範圍之內。ASCII字符集中的每一個可顯示字元(個別字元除外)都可以作為一個字元常量。但是,對於一些特殊的字元,如回車、換行等具有控制功能的字元,或者像單引號、雙引號等作為特殊標記使用的字元,就無法直接採用單引號作為起止字元來表示。為了表示這些特殊字元,C++中引入了“轉義”字元的概念,其含義是:用反斜線“\”引導的下一個字元失去了原來的含義,而轉義為具有某種控制功能的字元。

例:“\n” 中的字元n通過反斜線的轉義後就稱為一個換行符,其ASCII碼為10。為了表示作為特殊標記使用的可顯示字元,也需要用反斜線字元引導,例如,“\‘”表示單引號字元,若直接使用“ ' ”表示單引號是不行的。

另外,還允許用反斜線引導一個具有1~3位八進位制整數或一個以字母x(大小寫均可)作為開始標記的具有1~2位的十六進位制數,對應的字元就是以這個整數作為ASCII碼的字元。

由反斜線字元引導的符合上面規定的字元序列稱為轉義序列,轉義序列不但可以作為字元常量,也可以同其他字元一樣出現在字串中。

一個字元用於顯示輸出時,將輸出字元本身或體現出相應的控制功能;當它在表示式中參加整數運算時,將使用它的ASCII碼值。

》整型常量

整型常量就是整型常數,簡稱整數,它有十進位制、八進位制和十六進位制三種表示方式。C++中的整型資料除了一般的表示方法之外,還允許給它們新增字尾u或l。對於任一種進位制的整數,若字尾為字母u(不區分大小寫),則規定它為一個無符號整型(unsigned int)數,若字尾為字母L(不區分大小寫),則規定它為一個長整型(long int)數。在一個數的末尾,可以同時使用u和L,並且對排列無要求。

例:15U (unsigned int)     0123U (unsigned long int)       0X1abcL (long int)     1234LU (unsigned long int)

    >十進位制整數

       十進位制整數以正號(+)或負號(-)開頭,由首位非0的一串十進位制數字組成。若以正號開頭則為正數,若以負號開頭則為負數,若省略正負號,則預設為整數。

       整數在計算機中是有表示範圍的,因此一個整數在程式中使用時會受到大小的限制。當一個十進位制整數大於等於-2 147 483 648(-2^31),

       同時小於等於2 147 483 648(2^31-1)時,系統將其看做是整型常量;當在 2 147 483 648~4 294 967 295即2^32-1範圍之內時,則被看做是無符號整型常量;當超過上述兩個範圍時,則無法用C++整數型別表示,只有把它用實數(即帶小數點的數)表示才能夠被有效的儲存和處理。

     >八進位制整數

       八進位制數整數以數字0開頭,後面接若干個八進位制數字(借用十進位制數字中的0~7)。八進位制整數前面不帶正負號,全部預設為整數。

       當一個八進位制數大於等於0同時小於等於017 777 777 777時,稱為整型常量;當大於等於020 000 000 000同時小於等於037 777 777 777時,稱為無符號整型常量。不要使用超過上述兩個範圍的八進位制整數,因為沒有與此相對應的C++整數型別。

     >十六進位制整數

      十六進位制整數以數字0和字母x(不區分大小寫)開頭,後面接若干個十六進位制數字(借用十進位制數字0~9,字母A~F或a~f)。同八進位制整數一樣,十六進位制整數也全部為正數。

      當一個十六進位制整數大於等於0同時小於等於0x7FFFFFFF時,稱為整型常量;當大於等於0x80000000同時小於等於0xFFFFFFFF時,稱為無符號整型常量。超過上述兩個範圍的十六進位制整數也沒有與之相對應的C++整數型別,所以也不能使用它們。

》實型常量

實型常量簡稱實數,對應著數學中的實數概念。實型常量有十進位制的定點表示和浮點表示兩種方法。

       >定點表示

       定點表示的實數簡稱定點數,即以小數形式表示實數。定點表示的實數由一個正好或負號(正號可以省略)後接若干個十進位制數字和小數點組成,這個小數點可以處在任何一個數字位的前面或後面。

       >浮點表示

       浮點表示的實數簡稱浮點數,即以小數形式表示實數。浮點表示的實數由一個十進位制整數或定點數後接一個字母E(大小寫均可)和1~3位的十進位制整陣列成,字母E之前的部分稱為該浮點數的尾數,之後的部分稱為該浮點數的指數,該浮點數的值就是它的尾數乘以10的指數冪。

       對於一個浮點數,若將它尾數中的小數點調整到最左邊第一個非零數字的後面,則稱它為規格化(或標準化)浮點數,這有些類似於數學中的科學記數法。例如41.6E8是非規格化的,4.16E9則是規格化的浮點數。

       實型常量分為單精度(float)、雙精度(double)和長雙精度(long double)三類。一般float型資料在記憶體中佔4個位元組,提供7位有效數字;double型資料佔8個位元組,提供15位有效數字;long double型資料佔10個自己,提供19位有效數字。對於一個定點數或浮點數,C++自動按一個雙精度(double型)來儲存。若在一個定點數或浮點數之後加上字母F(大小寫均可),則自動按一個單精度數來儲存。

》列舉常量

        列舉常量是列舉型別中定義的值,即列舉值。列舉型別屬於使用者定義型別,用關鍵字enum表示,因此又稱為enum型別。使用者通常利用列舉型別定義程式中需要使用的一組相關符號常量。宣告列舉型別的語法格式為:

enum<型別名>{<列舉值表>};

其中,enum是關鍵字,指出要定義的是列舉型別。<型別名>是識別符號,即由使用者給出的具體列舉型別名。<列舉值表>包含多個列舉值,它們用逗號分隔開,每個列舉值就是一個列舉常量。列舉值有兩種定義形式:一是<值名>,而是<值名>=<整型常量>。

enum color{RED=1,YELLOW,BLUE};

關於enum型別有四點說明:

      >一個enum型別實際上是int型別的一個子集,其每一個列舉值代表一個整數。

      >n個列舉值全部未賦常量值時,它們自左至右分別與整數0,1,...,n-1對應。

      >若第i個列舉值賦常量值為m,則其未賦值常量的後續列舉值分別與整數m+1,m+2,...對應,直到下一個賦了值的列舉值或結束。因此,為列舉值所賦的整型常量值應從左至右遞增。在上面的例子中,YELLOW與整數2對應,BLUE與整數3對應。

      >列舉型別的宣告也可作為成組宣告若干整型符號常量的方法。也就是說,把每個要宣告的符號常量作為一個列舉值,將各個列舉值合在一起定義成一個列舉型別。

由於列舉型別屬於使用者定義資料型別,一旦列舉型別被定以後就可以使用它來定義變數,

例如:enum color c1,c2,c3;

其中關鍵字enum可以省略,color是已經定義的列舉型別,變數c1,c2,c3的取值可以是列舉值RED,YELLOW,BLUE中的任意一個。

》符號常量宣告語句

        符號常量在使用之前必須先進行定義。符號常量定義語句同變數定義語句類似,其語法格式為:

        const<型別名><符號常量名>=<初值表示式>,...;

        其中關鍵字const指明這是一條符號常量定義語句,後面跟著符號常量的型別名,接著是符號常量名,它是一個使用者定義的識別符號,符號常量名之後為一個賦值號和一個初值表示式。注意,必須在宣告符號常量的同時為其顯示賦初值。該語句也可以定義多個符號常量。

        系統執行符號常量定義語句時,需要依次為每個符號常量非配儲存單元並賦初值。一個符號常量定以後,它的值就是定義時所賦予的初值,作為常量,這個值以後將始終保持不變,因為系統只允許讀取它的值,而不允許再次向它賦值。在符號常量定義語句中,若<型別名>為int,則int可以省略。

        C++關鍵字中的true和false就是系統預先定義的兩個符號常量,它們的值分別為1和0。使用符號常量往往可以提高程式的可讀性和可維護性。由於符號常量和變數同樣要求系統為其分配記憶體單元,所以可以把符號常量視為一種不允許賦值改變的或只讀不寫的變數稱其為const變數。