- 編寫高質量代碼:改善C程序代碼的125個建議
- 馬偉 著
- 819字
- 2019-01-01 01:33:08
建議2-1:char類型變量的值應該限制在signed char與unsigned char的交集范圍內
大家應該都知道,C語言設計char類型的目的是存儲字母和標點符號之類的字符。實際上,char類型存儲的是整數而不是字符。為了處理字符,計算機使用一種數字編碼的方式來操作,如常見的ASCII就是用特定整數來表示特定字符的。例如,要在ASCII碼中存儲字母B,實際上只需要存儲整數66。因此,可以使用下面的方法為char類型的變量賦值。
char c=66;
在ASCII碼中,整型數據66在char類型的大小范圍之內,所以這樣的賦值方式是完全允許的,但不推薦使用這樣的賦值方式。
這里需要注意的是,采用這樣的賦值方式有個前提條件,即必須是在ASCII碼中。有時候不同的計算機系統也會使用完全不同的編碼,如一些IBM主機就使用一種稱為EBCDIC(Extended Binary-Coded Decimal Interchange Code,擴充的二進制編碼的十進制交換碼)的編碼方式。如果采用的是其他編碼方式,這樣的賦值方式所得到的結果就不一樣了。因此,我們推薦使用字符常量的方式進行賦值,如下面的代碼所示:
char c='B';
除此之外,在表1-3中還可以看出,默認的char類型可以是signed char類型(取值范圍為-127~127),也可以是unsigned char類型(取值范圍為0~255),具體取決于編譯器。也就是說,不同的機器上char可能擁有不同范圍的值。因此,為了使程序保持良好的可移植性,我們所聲明的char類型變量的值應該限制在signed char與unsigned char的交集范圍內。例如,ASCII字符集中的字符都在這個范圍內。
當然,在一個把字符當做整數值的處理程序中,可以顯式地把這類變量聲明為signed char或unsigned char,從而確保不同的機器中在字符是否為有符號值方面保持一致,以此來提高程序的可移植性。另一方面,許多處理字符的庫函數把它們的參數都聲明為char,如果我們把這些參數顯式地聲明為signed char或unsigned char,可能會帶來兼容性問題;并且有些機器處理signed char的效率更高些,如果硬要把它改成unsigned char,效率很可能會因此而受損。所以把所有的char變量統一聲明為signed char或unsigned char未必就是好的解決方案。因此,最佳的解決方案就是把char類型變量的值限制在signed char與unsigned char的交集范圍內,這樣既可以獲得最大程度的可移植性,同時又不會犧牲效率。
- Go Web編程
- Implementing VMware Horizon 7(Second Edition)
- Instant Testing with CasperJS
- Java Web開發之道
- MATLAB定量決策五大類問題
- PySide 6/PyQt 6快速開發與實戰
- 從零開始學C語言
- 基于SpringBoot實現:Java分布式中間件開發入門與實戰
- R語言數據可視化:科技圖表繪制
- Scala編程(第5版)
- ASP.NET Web API Security Essentials
- 體驗之道:從需求到實踐的用戶體驗實戰
- Java編程指南:語法基礎、面向對象、函數式編程與項目實戰
- JBoss AS 7 Development
- Spark for Data Science