tft每日頭條

 > 科技

 > c語言為什麼char字符顯示問号

c語言為什麼char字符顯示問号

科技 更新时间:2024-12-25 15:20:52

C語言中的 unsigned int 和 signed int 類型的區别,相信即使是初學者也是清楚的,無非就是最高位是否用來做符号位而已。但是最近有讀者問我,為什麼 char 類型也要區分 unsigned char 和 signed char 型呢?字符怎麼可能還區分正字符和負字符呢?

c語言為什麼char字符顯示問号(C語言中的char類型也有signed和unsigned)1

字符怎麼可能還區分正字符和負字符呢?

其實,C語言中并沒有專門用來表示字符的數據類型,事實上,char 像 int、short 類型一樣,也是一種整型,隻不過,char 類型是最短的整型而已,所以它當然可以有 signed 和 unsigned 兩種類型。

的确,char 是 character 的縮寫,很多時候我們會把 char 類型當作是“字符類型”,但是在高度概括抽象的C語言中,字符也是整數,隻不過它們遵循一些編碼而已,因此說 char 類型也是一種整型并不為過。

如果要說C語言中 char 類型與 short、int 等整數類型的區别,除了占用内存寬度不同,其他唯一的區别可能就在于:char 類型一般不等同于 signed char 型。

c語言為什麼char字符顯示問号(C語言中的char類型也有signed和unsigned)2

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;

c語言為什麼char字符顯示問号(C語言中的char類型也有signed和unsigned)3

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類型也有signed和unsigned)4

C語言中的char類型

但是我認為,在學習C語言中,不應該為自己設置這麼多“特例”,否則總有弄混的時候,能夠統一的東西,盡量統一理解:char 類型是整數類型,C語言中的字符也不過是一種編碼後的整數而已。

“高度統一美”不僅在計算機領域,在其他領域也是如此,科學巨匠愛因斯坦晚年的主要工作之一就是統一幾大基本作用力。

c語言為什麼char字符顯示問号(C語言中的char類型也有signed和unsigned)5

點個贊再走吧

歡迎在評論區一起讨論,質疑。文章都是手打原創,每天最淺顯的介紹C語言、linux等嵌入式開發,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。

未經許可,禁止轉載。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved