c char*转int_C语言中的char类型也有signed和unsigned?字符也有正负之分吗?
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等嵌入式開發,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。
未經許可,禁止轉載。
總結
以上是生活随笔為你收集整理的c char*转int_C语言中的char类型也有signed和unsigned?字符也有正负之分吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程迷宫_少儿创意编程(特23)scra
- 下一篇: mysql-gui怎么执行_MySQL