C语言字符型数据的ASCII码值为何输出是负数?

2019-02-26  本文已影响0人  胖一一

有如下一段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吧。实际运行结果如下:


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】。

欢迎留言讨论技术。

上一篇下一篇

猜你喜欢

热点阅读