详解ASCI I 编码及C语言如何显示ASCI I 码字符

详解ASCI I 编码及C语言如何显示ASCI I 码字符ASCI I 编码表主要是字符的编码 一共编码了 128 个字符 其中 33 个控制字符 95 个可显示字符 33 个控制字符包含 ASCII 值 0 31 含水平制表符 垂直制表符 换页 换行 127 删除 共 33 个不可显示字符

大家好,我是讯享网,很高兴认识大家。

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 永远为真,循环当然无法终止啦。

小讯
上一篇 2025-02-25 15:35
下一篇 2025-03-12 11:00

相关推荐

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