C語言字符型數據的ASCII碼值爲何輸出是負數?

有如下一段C語言程序:

#include "stdio.h"
int main(void)
{
char a = 0xC8;
printf ("字符a的ASCII碼值的10進制是%d\n", a);
return 0;
}

程序定義了一個字符‘a’,並且賦予了初始值“0xC8”,這是一個16進制的數。最後,通過printf函數輸出字符a的值。

程序不難,光看程序,也應該知道最終的結果。16進制“0xC8”的10進制數是200,所以程序應該輸出字符a的ASCII碼值是200吧。實際運行結果如下:


4232298-5c4d2b5c6873e89e.png
image.png

範圍,超過的部分是200 – 127 = 73。那麼超過的部分又從-128開始計數了,也就是-128 + 73 - 1 = -56了。

如果在定義字符a時,類型寫成“unsigned char”,那麼舊標明字符a的10進制ASCII碼值是無符號的,取值範圍就是【0,255】了。朋友們可以修改下程序看看結果是什麼。

下一篇來談談爲何“char”類型的取值範圍是【-128,127】,而“unsigned char”取值範圍是【0,255】。

歡迎留言討論技術。

發佈了209 篇原創文章 · 獲贊 83 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章