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吧。实际运行结果如下:
结果是-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】。
欢迎留言讨论技术。
本文为作者原创,欢迎转发!
C语言字符型数据的ASCII码值为何是负数?的更多相关文章
- C语言编程基础学习字符型数据的ASCII码值为何是负数?
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- C语言之将无符号字符型转化为ascii码值
这个宏是在linux内核中获取的,主要的功能是能够将一个无符号字符型的参数转化为ASCII码值. ASCII : ASCII 编码里包括了128个字符.用 十进制 0 到 127 来表示 .那就对了 ...
- 利用C语言识别用户输入字符并且输出该字符ASCII码值(大小写字母篇)(含思路)
要求:从键盘输入一个字符,如果输入字符的是小写英文字母,则将其转换为大写英文字母,然后将转换后的英文字母及其ASCII码值输出到屏幕上,如果输入的是其他字符,则不转换并且直接将它及其ASCII码值输出 ...
- 【C语言入门教程】2.5 字符型数据
字符型数据用于在计算机上保存字符编码和一些文本控制命令,多个字符型数据和字符串结束符组成的序列称为字符串.Linux 系统与其他大多数操作系统一样,支持 ASCII编码对字符编码,每个字符占用 1 个 ...
- C语言:将形参s所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,
//将形参s所指字符串中所有ASCII码值小于97的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数返回. //关注点:使用*(t+n)的方式可以不改变指针的指向,像数组一样处理 ...
- C语言:将ss所指字符串中所有下标为奇数位置的字母转换为大写-将该字符串中的所有字符按ASCII码值升序排序后输出。-将a所指的4*3矩阵第k行的元素与第0行元素交换。
//函数fun:将ss所指字符串中所有下标为奇数位置的字母转换为大写,若不是字母,则不转换. #include<conio.h> #include<stdio.h> #incl ...
- sort将文件的每一行作为一个单位按ASCII码值进行比较
1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出. [rocrocket@rocrocket progr ...
- 回车、换行、空格的ASCII码值—(附ASCII码表)
回车.换行.空格的ASCII码值 回车,ASCII码13换行,ASCII码10空格,ASCII码32 Return = CR = 13 = '\x0d'NewLine = ...
- Java ascii码值转为输出ascii码
Java ascii码值转为输出ascii码 public static void main(String[] args) { // TODO Auto-generated method stub S ...
随机推荐
- Wow6432Node
64 位版本 Windows 中的注册表分为 32 位注册表项和 64 位注册表项.许多 32 位注册表项与其相应的 64 位注册表项同名,反之亦然. 64 位版本 Windows 包含的默认 64 ...
- Android Contact 导入导出 vcf格式(不依赖第三方库)
Android sdk 支持vcf处理的(忘记最低哪个版本开始支持的了,可以查一查) 备注:此代码来自Stack Overflow(原地址找不到了,o(╥﹏╥)o) 1. 导出联系人为vcf格式 Co ...
- vs2010 编译release没问题debug编译不通过
------ 已启动全部重新生成: 项目: VM661JTcpDLL, 配置: Debug Win32 ------生成启动时间为 2018-12-29 14:07:20.项目文件包含 ToolsVe ...
- Upgrade a Non-CDB To a PDB on CDB
.Stop the cluster database and start database on one node with read noly [oracle@raca1 admin]$ srvct ...
- VS中添加第三方库及相对路径设置
原文 VS中添加第三方库及相对路径设置 对于一些第三方的SDK,一般会包含头文件(*.h),静态库文件(*.lib)和动态库文件(*.dll). 1. 文件位置:为了提高程序的可移植性,将第三库放在 ...
- QT5.8 VS2017 编译教程(可以使用VS2017 XP兼容包)
1.下载QT5.8源码 这个我不做过多解释. 2.安装使用的环境 visual studio 2017 Python Perl Ruby 安装好,并配置好环境PATH变量. 3.修改错误代码 错误 ...
- RoboVM 1.1 发布,Java 转原生平台代码
分享 <关于我> 分享 [中文纪录片]互联网时代 http://pan.baidu.com/s/1qWkJfcS 分享 <HTML开发MacOSAp ...
- qt在windows下的udp通信(最简单)
qt编程:windows下的udp通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:win7 开发环境:qt 功能: 用udp进行收发 ...
- PHP PSR4自动加载代码赏析
第一部分是引入自动加载配置文件 1.入口文件:autoload.php里面没什么东西,就是导入ComposerAutoloader主题文件,一般由一个复杂的名字,不过不用担心就是机器随机生成的一个码而 ...
- 解释一下,知乎上关于C语言奇技淫巧最火的回答。
前几天逛知乎,碰巧发现一个很火的问题. “C 语言有什么奇技淫巧?”虽然问题本身没有什么特殊的地方,但是网友的回答却是非常幽默. 下面就让我们一起来分析一下,被赞最多的答案“C 语言运算符 趋向于‘- ...