ASCI I 编码表主要是字符的编码,一共编码了128个字符,其中33个控制字符,95个可显示字符。
- 33个控制字符包含ASCII值0 - 31(含水平制表符,垂直制表符,换页,换行)、127(删除),共33个不可显示字符。
- 95个可显示字符包含ASCII值32 - 126共95个可显示字符。其中包含10个数字字符,52个字母,33个为标点符号和运算符号(含空格)。
33个控制字符多数都已是陈废的控制字符,其用途主要是用来操控已经处理过的文字。虽然在大多数情况下,ASCII码值为0 - 31之间的字符不可显示,但根据所使用的操作系统不同,在某些DOS模式下可显示诸如笑脸、扑克牌花色等符号。
实现显示128个ASCII 码字符的C语言程序如下所示:
#include <stdio.h> int main(void) { int i; for(i = 0; i <= 127; i++) { printf("%5c", i); //打印一个ASCII字符 if(i % 16 == 0) printf("\n"); //每打印16个字符换行 } return 0; }
讯享网
输出如下图所示:
可以看出来, 前32个字符都没有显示出来。

- ASCII码值为13(0x0D)的控制字符是CR(回车),因此第一行实际上只输出了码值为0 - 12的字符(共13个)。第二行输出的三个字符是ASCII码值为14 - 16的字符;
- 第三行最后一个字符是ASCII码值为32(0x20)的字符,是Space(空格),因此屏幕上看不到字符;
- ASCII码值33 - 126的字符都是可显示的英文字母、数字、标点符号和运算符
- 最后一个字符是ASCII码值为127(0x7f)的字符,是DEL(删除),也属于控制字符
关于C语言中char类型变量的取值范围的讨论:
C语言中char类型变量的占1个字节的空间,取值范围为 -128 ~ 127。在编程时一定要注意各种变量取值范围,忽视边界情况可能会导致代码出现死循环或者其他异常。
举例说明,将上面代码中的int i换成char ch:
讯享网#include <stdio.h> int main(void) { char ch; for(ch = 0; ch <= 127; ch++) { printf("%5c", ch); //打印一个ASCII字符 if(ch % 16 == 0) printf("\n"); //每打印16个字符换行 } return 0; }
当ch达到最大值127(0x7f)后,再增1就变成了-128(0x80),而关系表达式 -128 <= 127 为真,因此for循环不会终止,将继续运行下去;再继续增1,ch值变为 -127(0x81),关系表达式 -127 <= 127 为真,for循环继续。。。以此类推,for循环将永远不会结束。
是什么原因导致这段看上去很正常的代码出现死循环呢?原因就是编程时没有关注char类型变量的取值范围为 -128 ~ 127,这使得关系表达式 ch <= 127 永远为真,循环当然无法终止啦。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/47943.html