关于char 型 的 存储实质(asc2码表的)

来源:互联网 发布:php调用 编辑:程序博客网 时间:2024/05/29 05:55

 起因:有一天一个朋友发来一个程序给我看

#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码值;

  如有疑问/错误欢迎广大网友指出:

   



0 0
原创粉丝点击