char A=14与char A=‘14’与int A=14与int A='14',你真的懂了吗?

来源:互联网 发布:小马win7激活软件 编辑:程序博客网 时间:2024/05/22 03:28

 

    现场工作做完了,有时间出来研究一下ASCII码在内存中的保存方式和各种类型赋值的关系,请看下面的问题,都能答对的基本可以无视后面的内容了。

    首先定义两个宏,代码中使用。

#define PRT_C(expr) printf("%s = %c/n",#expr,expr)
#define PRT_D(expr) printf("%s = %d/n",#expr,expr)
第一题:

 int AA = '5';
 int  A = 5;
 PRT_C(A);
 PRT_D(A);
 PRT_C(AA);
 PRT_D(AA);


第二题:

 char BB='5';
 char B=5;
 PRT_C(B);
 PRT_D(B);
 PRT_C(BB);
 PRT_D(BB);

第三题:

 int AA = '15';
 int  A = 15;
 PRT_C(A);
 PRT_D(A);
 PRT_C(AA);
 PRT_D(AA);

 

第四题:

 char BB='15';
 char B=15;
 PRT_C(B);
 PRT_D(B);
 PRT_C(BB);
 PRT_D(BB);

 

我一直以为char A='15'是输出ASCII码为15的字符,事实上这样是大错特错的,测试结果如下:
输出结果如下:

解一可以看出输出AA是字符5,也就是'5','5'的ASCII码是0x35,也就是53.

解二长度为1的整型跟字符型可以串用。所以结果相等。

解三为什么'15'整型输出是12597?字符型输出是5?这点应该要重点研究,我相信很多人都不知道。

我的理解是: int AA = '15'; 实际上是'1'和'5',在内存中是这样存的: 35 31 00 00,从内存也可以证实确实是'1'和'5',

                  按字符型输出后,因为字符型只有一字节,所以取35,那么字符输出就是53.而按整型输出的话,整型占四字节

                  因为字符是'1'和'5'ASCII码是0x31 35,16进制转成10进制就是12597了。

解四就一个12597不同,这个看解三就知道了,因为定义的是一个字符型,只能有一个字节。

说了这些,也不知道写清楚没有,希望以后看的时候不会忘记,我最后的结论是:

输出ASCII为88的字符,可以用char A=88或者int A=88;

若用 char A=‘88’或者int A=‘88’; 输出的就是 char A=‘8’了。

感觉知道一点了,但好像又不是太清晰,欢迎熟悉这块的兄弟指点指点,大家讨论下。

 

 

原创粉丝点击