zoukankan      html  css  js  c++  java
  • C语言字符型数据的ASCII码值为何是负数?

    有如下一段C语言程序:

    #include "stdio.h"
    int main(void)
    {
    char a = 0xC8;
    printf ("字符a的ASCII码值的10进制是%d
    ", 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】。

    欢迎留言讨论技术。

    本文为作者原创,欢迎转发!


  • 相关阅读:
    第三届蓝桥杯CC++B组3
    第三届蓝桥杯CC++B组2
    第三届蓝桥杯CC++B组1
    第四届蓝桥杯c/c++B组3
    第四届蓝桥杯c/c++B组4
    第四届蓝桥杯c/c++B组5
    Nodejs RESTFul架构实践之api篇
    Request —— 让 Node.js http请求变得超简单
    [转]在SqlServer 中解析JSON数据
    JavaScript异步编程的Promise模式
  • 原文地址:https://www.cnblogs.com/itblog/p/7236555.html
Copyright © 2011-2022 走看看