C語言中的 unsigned int 和 signed int 類型的區别,相信即使是初學者也是清楚的,無非就是最高位是否用來做符号位而已。但是最近有讀者問我,為什麼 char 類型也要區分 unsigned char 和 signed char 型呢?字符怎麼可能還區分正字符和負字符呢?
字符怎麼可能還區分正字符和負字符呢?
其實,C語言中并沒有專門用來表示字符的數據類型,事實上,char 像 int、short 類型一樣,也是一種整型,隻不過,char 類型是最短的整型而已,所以它當然可以有 signed 和 unsigned 兩種類型。
的确,char 是 character 的縮寫,很多時候我們會把 char 類型當作是“字符類型”,但是在高度概括抽象的C語言中,字符也是整數,隻不過它們遵循一些編碼而已,因此說 char 類型也是一種整型并不為過。
如果要說C語言中 char 類型與 short、int 等整數類型的區别,除了占用内存寬度不同,其他唯一的區别可能就在于:char 類型一般不等同于 signed char 型。
char 類型一般不等同于 signed char 型
也就是說,不指定 signed 或者 unsigned 的 char 類型,在C語言中是未定義的,若考慮不同的編譯器,我們不能确定 char 類型到底是有符号的,還是無符号的。而對于 short、int 類型,如果不明确指定 signed 或者 unsigned,一般默認其為有符号的。
稍稍總結一下,C語言中的 unsigned char 型的變量最高位也用于表示數值大小,而 signed char 類型變量的最高位則用于表示數值的符号 /-,char 型變量是否有符号,則屬于未定義,在不同的編譯器上表現可能是不同的。因此,對于:
char a; signed char b; unsigned char c;
char型也是整數類型
對于變量 b,隻有低 7 位表示它的數值,也即 -128~127。對于變量 c,所有的 8 位都用于表示數值,因此它可以表示的數值範圍為 0~255(2^8-1)。
按理說,變量 b 的最高位是符号位,它能表示的數值範圍是 ( /-)(2^7-1),也即-127~127,但是為什麼大家都說它的範圍是 -128~127 呢?如果讀者覺得費解,我将在之後解答,敬請關注。也有人這麼理解:char 類型用于表示字符類型時,鑒于“字符沒有正負之分”,此時 signed 和 unsigned 都會被C語言編譯器丢棄,就像編譯器丢棄注釋一樣。
C語言中的char類型
但是我認為,在學習C語言中,不應該為自己設置這麼多“特例”,否則總有弄混的時候,能夠統一的東西,盡量統一理解:char 類型是整數類型,C語言中的字符也不過是一種編碼後的整數而已。
“高度統一美”不僅在計算機領域,在其他領域也是如此,科學巨匠愛因斯坦晚年的主要工作之一就是統一幾大基本作用力。
點個贊再走吧
歡迎在評論區一起讨論,質疑。文章都是手打原創,每天最淺顯的介紹C語言、linux等嵌入式開發,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。
未經許可,禁止轉載。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!