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

    欢迎留言讨论技术。

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


  • 相关阅读:
    ThreadLocal总结
    zookeeper学习笔记
    安装solr
    VirtualBox安装Centos7
    Solr学习
    Redis缓存会出现的问题?
    面试题目总结
    mysql分库分表
    Java内存模型
    HashMap在多线程中循环链表问题(jdk1.7)
  • 原文地址:https://www.cnblogs.com/itblog/p/7236555.html
Copyright © 2011-2022 走看看