官术网_书友最值得收藏!

建議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的交集范圍內,這樣既可以獲得最大程度的可移植性,同時又不會犧牲效率。

主站蜘蛛池模板: 友谊县| 阿瓦提县| 桦南县| 杭锦后旗| 罗田县| 南漳县| 卢湾区| 鄂托克前旗| 滦南县| 成都市| 湘潭县| 福海县| 新化县| 新巴尔虎左旗| 兰考县| 孟津县| 星子县| 广昌县| 哈尔滨市| 黎平县| 神池县| 曲松县| 东兴市| 彭州市| 邹城市| 山阳县| 扶绥县| 潍坊市| 乌兰察布市| 龙海市| 尼玛县| 富顺县| 砚山县| 汝阳县| 屯留县| 炎陵县| 马山县| 涟水县| 德钦县| 福鼎市| 温泉县|