【C语言】3. 关于字符和ASCII的那些事
1,为什么"0"代表的是48 ?
2,为什么"5"+"0"还是5呢?
3,c1=‘A’+32输出来是c1=a 是固定格式吗?
这样的问题太多了,我决定科普一下字符和ASCII的一些知识。
01
提问姿势要对
有些同学提问的姿势没对(哈哈,不是说你坐的不正,写的是歪的。),同学们没有分清楚单引号和双引号的区别。’a’和”a”不是一个东西,’a’是字符常量a,在计算机的内存里占用了一个字节的存储单元,里面放了字符a的ASCII码(0110 0001)2,转换成十进制即97。
”a”是字符串常量,在计算机的内存中占用了两个字节的存储单元,第一个字节存储了字符a,和’a’一样,第二个字节存储了字符串结束标志’\0’,它的ASCII码(0000 0000)2,转换成十进制即0。如果你只存一个字符就用单引号,如果你需要多个字符就用双引号,计算机会根据你的内容决定给你分配多少内存空间(字符用字符变量存储,字符串用数组来处理,变量和数组都需要先定义再使用)。
02
什么是ASCII?
说说ASCII,这也是很多同学问的为什么’0’是48,’a’是97。(其实这个问题大家去百度百科看一下就明了了。大家有点懒惰,我就搬一些过来吧。)ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,到目前为止共定义了128个字符。编码表如下:
如果你还看不懂,再给你一个更简单的表格吧。
至于很多同学问的为什么’0’的ASCII是48,那现在就告诉你,你就知道这是人家编好的码,我们只需要使用就可以了,没有什么原因,记住就OK。记住,老师,有没有搞错,这么多怎么记?不需要全部记住,记住这几个常见字母的ASCII码就可以:’A’为65;’a’为97;’0’为 48。
常见ASCII码的大小规则:0~9<A~Z<a~z。
1)数字比字母要小。如 ‘7’<’F’;
2)数字0比数字9要小,并按0到9顺序递增。如 ‘3’<’8’ ;
3)字母A比字母Z要小,并按A到Z顺序递增。如’A’<’Z’ ;
4)相同字母的大写字母比小写字母要小32。如’A’<’a’ ,且’A’+32=’a’。
03
字符怎么存储与计算?
ASCII知道了,接下来就说说那些算式吧。其实C语言的语法算很灵活的,字符型可以和整型进行加减运算,这也是由于计算机内部采用二进制,字符在计算机中用ASCII存储。所以‘A’+32就相当于65+32结果就是97也就是’a’的ASCII,因此‘A’+32的结果就是’a’。有同学困惑了,老师,屏幕上显示97还是a还是’a’。是这样的,在计算机的内存中这个存储单元里存的是’a’的ASCII码97的二进制(0110 0001)2,至于输出什么,看你用什么格式输出,如果输出格式是"%d",则显示97,如果输出格式是"%c",则显示a。’a’是给计算机看的,我们人不需要引号就认识a,所以输出时不会有引号。
大概就这么多了吧,如果还不清楚请在评论区留言吧。