起因:有一天一个朋友发来一个程序给我看
#include <stdio.h>
void main()
{
int a,b=322;
float x,y=8.88;
char cl='k',c2;
a=y; \\ a=8
printf("a=%d",a);
x=b; \\x=322.000000
a=cl; \\ a等于 字母 k的 asc2 码 107 ,a=107
<span style="color:#ff0000;"> c2=b; \\ c2 等于 322 这个asc2 码所对应的 字符</span>
printf("a=%d,x=%f,a=%d,c2=%c\n",a,x,a,c2);
}
答案的输出:a=107,x=322.000000,a=107,c2=B;
问题就出现在为什么c2输出是 c2=B 呢?
字符型 char
对于单个字符 char ch='B'; 或者 char ch=66; //因为字符在计算器中其实是用asc2 码表存储的,一个字符占一个字节(即8位);
对于字符串 char ch[80]="abcdefg";// ch[80],字符串的长度为80即可以存放79个字符,还有一个到哪去了呢,还有一个 当结束控制符了'\0';
//还有需要提醒的就是 单字符 用 单引号,多字符用双引号;
好啦前面讲的都是写鸡毛蒜皮的事,重点来了,回到上面那个问题 为什么c2输出是 c2=B 呢?
先来个asc2码表
acs2码表的共有128 个字符(0~127);是不是觉得很奇怪呢 c2=322;超过了127呢;
那该怎么办呢,但是c2的输出是 B;
322=2*128+66; //生气的东西又出现了,那个输出的c2=322;对应的字符 B 的asc2码的 值 就是 66;
那么聪明的你应该懂了吧?
其实我们一个字符付上 整形值,则这个整形值就有对应的asc2码值,那么计算机的内部指令是怎么走的呢 加上你输入的是c2=m;这里的m为一个整形数
内部指令为(m+128)mod128= ?;这个问号就是你得到的asc2码值;
如有疑问/错误欢迎广大网友指出:
版权声明:本文为u011706736原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。