天天看點

《C語言程式設計:問題與求解方法》——2.9節常量

本節書摘來自華章社群《c語言程式設計:問題與求解方法》一書中的第2章,第2.9節常量,作者:何 勤,更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

2.9 常量

c語言源程式中,可以使用的運算量有兩大類:常量和變量。在程式運作過程中,其值不能被改變的量稱為常量。

c語言中常量又分為數值常量和符号常量兩大類。程式中應當多使用含義比較清楚的符号常量,盡量不要用意義不太明确的數值常量。

2.9.1 數值常量

在c語言源程式中,數值常量可以直接使用,數值常量的書寫規則與我們在日常工作中書寫常量的規則很類似但又有些差別。必須嚴格按照c語言的規範要求來書寫,否則,編譯程式将無法識别,不能将其轉換成機器指令能夠處理的二進制機内形式的常量。

常用的數值常量有以下幾種:

1)十進制整型常量 : 567、–425 、0 等, 這是沒有小數分量的整數值。可以帶有正負号,但正号可以省略不寫。

注意:一個整型常量的各個數字之間不能出現空格或逗号(例如,12345 既不能寫成12,345也不能寫成12 345)。除了整數值0以外,其他任何整數值不能以0開頭(比如,0761會被編譯程式當作八進制整數,參見第3章)。

整型常量的其他表示形式請參見下一章。

2)實型(或稱為浮點型)常量。實型常量在源程式中的兩種書寫形式是:

十進制小數形式:由正負号、數字、小數點構成。0.543、.543、543.、543.21、0.0 都是十進制的小數形式。在數的左邊還可以加上正負号。比如–543.0。小數點的兩邊至少有一邊要有數字。

指數形式:絕對值太小或太大的實型常量,用小數形式表示很不友善,可以用指數形式表示。比如,數學中的7.16×1015 在c語言中要用7.16e+15 表示;數學中的–3.456×10–11在c語言中要用–3.456e–11 表示。

注意:一個數值的指數表示形式并不是唯一的。比如,54.3e–2和5.43e–1都等于0.543,也就是說表示同一個實數時,該數的小數點是可以“浮動”的。這是浮點數名稱的由來。

小數點前面隻保留一位非零數字的指數形式,稱為規範化的指數形式。

提示:指數形式浮點數的書寫規則

字母e(或者e)之前和之後都必須有數字,這些數字之前都可以帶有正負号。

e(或者e)之後的指數必須是一個整數值。

在字母e(或者e)的前後以及數字之間不得插入空格。

注意,在c語言源程式中不能使用二進制常量。

3)字元常量:用一對單引号括起來的英文常用字元集(英文常用字元集對于絕大多數當代計算機來說,就是ascii字元集)中的單個字元,稱為字元常量,例如'a'、'*'、'8'、' '(這是一個空格字元)等。

在程式的正文部分書寫字元常量時,都必須用單引号包覆,以便與單個字元的辨別符或運算符差別開來。比如在源程式正文部分,a 是辨別符,+ 是加法運算符,然而,用單引号包覆的'a' 和'+'都是字元常量。但是在輸入或輸出字元常量時,都不用單引号包覆。

在c語言中,可以使用轉義字元'n'表示“回車換行”字元,本章後面将對轉義字元進一步說明。

字元常量是用計算機進行文字處理的基礎。

4)字元串常量:由用雙引号括起來的連續多個字元組成,如“567”、“hello”等。

我們在程式中看到的字元串常量,其實在記憶體中,通常隻不過是在多個連續的位元組中存放的一串二進制的ascii碼而已。

注意:“h”是字元串常量而不是字元常量。

2.9.2 符号常量

前面所講的都是數值常量(c語言中字元常量也是數值常量中的一種)。而符号常量是用符号在源程式中表示一個數值常量。符号常量一般由大寫英文字元組成的辨別符構成,用編譯預處理指令#define将符号常量與某個數值常量關聯起來。 比如:

這樣一來,在進行編譯之前,源程式中所有出現的符号常量pi都會被編譯預處理程式用 3.14 替換掉。

使用符号常量會使得修改常量的值變得非常友善。對于上例,隻要将 #define pi 3.14 修改為#define pi 3.1416 ,則源程式中多處出現的pi便都會被編譯預處理程式替換成 3.1416,程式的可讀性也更好。

對于字元常量和整型常量,也都可以用符号常量來表示,比如:

2.9.3 資料的機内形式和機外形式

源程式中(或輸入輸出時),常量(或變量)值的形式(比如十進制形式)稱為資料的機外形式;而計算機内部存儲(和傳輸)的二進制資料形式稱為資料的機内形式。一個機内形式的資料常常可以表示為多種等值的機外形式的資料。

我們在編寫c語言源程式和運作程式輸入資料時,隻能使用資料的機外形式,不能使用二進制資料。将機外形式資料轉換成機内形式資料是由系統(編譯程式、輸入輸出庫函數等)自動進行的。但是在遇到了一些疑難程式設計問題(溢出、類型轉換或進行嵌入式程式設計和系統程式設計)時,往往需要了解和掌握資料的機内形式,才能找到較好的解決方案。

延伸與拓展:資料的機記憶體儲形式

整型量在計算機内部的存儲方式

整型量在計算機内部的存儲方式有兩類:無符号整型和有符号整型。無符号整型就是用一定長度的二進制位串直接表示的非負整數。有符号整型就是用一定長度的二進制位串作為編碼,來間接表示一個有符号整數。通常用最高位表示數的符号,最高位為0表示正數,最高位為1表示負數。在絕大多數計算機中,使用補碼來表示有符号整數。

實型量在計算機内部的存儲方式

在計算機内部,實型量的存儲方式與整型量的存儲方式全然不同。它們通常是以規範化的指數形式來存儲的(即小數點前面隻有一位非負整數的指數形式,在二進制中,這個非負整數必定是1)。一般是用記憶體中位址連續的幾個位元組(比如4個位元組一共32位)中的最高位表示數的正負号、若幹位表示數的指數部分、若幹位表示數的小數部分(即除去一位非零整數部分後的小數部分),見下表。

符号位(占1位) 指數部分(若幹位) 小數部分(若幹位)

指數部分的符号通常隐含在指數部分的資料位串中,這是由于指數部分通常采用餘碼表示法,進一步的讨論請參見第3章。

【過關測試】指出例題2.2中,哪些是程式的正文部分?哪些是關鍵字?哪些是辨別符?哪些是數值常量?哪些是符号常量?

繼續閱讀