首页
/
每日頭條
/
科技
/
c語言為什麼char字符顯示問号
c語言為什麼char字符顯示問号
更新时间:2025-12-13 17:58:22

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等嵌入式開發,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。

未經許可,禁止轉載。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
别克君威1.5T發動機怎麼樣
别克君威1.5T發動機怎麼樣
1、别克君威的發動機配置了LTG的渦輪增壓發動機和LFV渦輪增壓的發動機。LTG的渦輪增壓發動機最大馬力為261ps,最大功率為192kw;LFV渦輪增壓的發動機最大馬力為170ps,最大功率為125kw。2、别克君威1.5T的發動機是采用LFV渦輪增壓的發動機,配備了渦輪增壓器,其最大功率可以增加40%或更高。3、渦輪增壓器實際上是一種空氣壓縮機,通過壓縮空氣來增加進氣量。它是利用發動機排出的廢
2025-12-13
手機突然自動關機打不開了怎麼辦
手機突然自動關機打不開了怎麼辦
1、當我們正在使用我們手機的時候,突然出現手機莫名其妙關機,而且打不開的情況下,我們就需要注意了。2、當我們對我們的手機進行開機,但是手機智能進入開機畫面後,無法正常打開我們就需要對手機進行查看了。3、我們的手機自動關機的可能是我們的手機電池的電量不足的情況引起的,這個時候我們可以從新安裝手機電池。4、我們手機引起這樣的原因有很多種,如果是以前有過ROOT手機的情況,那麼有可能是我們的手機系統不穩
2025-12-13
微信名片電話号碼怎麼設置
微信名片電話号碼怎麼設置
演示機型:Iphone12系統版本:ios14APP版本:微信8.0.0這是微信自動顯示的,自己沒辦法設置,但可以将号碼放在個人簡介裡面。若部分好友有手機号,是因為手機通訊錄中本身就有對方的手機号,基于查看方便,微信才會顯示。如果手機中沒對方手機号,微信也不會顯示手機号,這是基于保護隐私。微信:微信(WeChat)是騰訊公司于2011年1月21日推出的一個為智能終端提供即時通訊服務的免費應用程序,
2025-12-13
怎麼防止分節符空白頁
怎麼防止分節符空白頁
演示機型:華為MateBookX系統版本:win10APP版本:word20161、中下一頁的段落,右鍵選擇“段落”。2、将換行和分頁設置中,“段中不分頁”和“段前分頁”前面的鈎去掉。3、兩個鈎去掉後,下面這段文字就上來了,空白頁即可去除。word快捷鍵:獲取幫助或訪問MicrosoftOffice.comF1移動文字或圖形F
2025-12-13
吉利缤越自動擋怎麼開
吉利缤越自動擋怎麼開
1、把擋位挂在P或N擋的時候啟動,大部分車同時需要腳踩刹車,因為這主要是為了防止意外而設置的程序,啟動後挂入D”擋加油前進就可以了。遇到紅綠等沒必要換擋,踩住刹車就行了要是需要停的時間要長一些,要把擋位放當P檔上。2、各種車型自動擋有一些差别,有的有M”擋,叫手動模式,有+-,分别代表升擋和降擋;有的有S”擋,叫運動模式,延遲升擋位,可以足夠的扭矩動力。有的有叫L”擋的,叫低速擋,這幾種模式無論是
2025-12-13
Copyright 2023-2025 - www.tftnews.com All Rights Reserved