有如下一段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吧。實際運行結果如下:
結果是-56,還是個負數,C語言初學者估計一頭霧水了。
其實字符a在定義時如果就寫一個“char”,則就默認類型是“signed char”,也就是說字符a的10進制ASCII碼值是有符号的,取值範圍是【-128,127】,那麼200這個數肯定就超過這個範圍,超過的部分是200 – 127 = 73。那麼超過的部分又從-128開始計數了,也就是-128 73 - 1 = -56了。
如果在定義字符a時,類型寫成“unsigned char”,那麼舊标明字符a的10進制ASCII碼值是無符号的,取值範圍就是【0,255】了。朋友們可以修改下程序看看結果是什麼。
下一篇來談談為何“char”類型的取值範圍是【-128,127】,而“unsigned char”取值範圍是【0,255】。
歡迎留言讨論技術。
本文為作者原創,歡迎轉發!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!