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’了。
感觉知道一点了,但好像又不是太清晰,欢迎熟悉这块的兄弟指点指点,大家讨论下。
- char A=14与char A=‘14’与int A=14与int A='14',你真的懂了吗?
- char*A与A[]
- char a[]与 char *a
- (int&)a 与 (int)&a
- int *a 与 int* a
- int a[5]={}, &a+1与(int*)a+1的区别
- int a = (int)(char)(byte)-1;
- int a = 0 与 int a(0) int a(b)
- char *a 与char a[] 的区别
- char *a 与char a[] 的区别
- char *a 与char a[] 的区别
- char *a 与char a[] 的区别
- char *a 与char a[] 的区别
- char *a 与char a[] 的区别
- char *a 与char a[] 的区别
- char *a 与char a[] 的区别
- char *a 与char a[] 的区别
- char *a 与char a[] 的区别
- 【转】ARM平台上蓝牙协议栈Bluez的移植使用和配置
- Extjs extend
- 实验: 数据类架子
- SAP GUI 登陆密码可保存
- OpenCV读取视频要求
- char A=14与char A=‘14’与int A=14与int A='14',你真的懂了吗?
- Separator Line on Form
- 团队合作的重要性
- IP – Ethernet Multicast 地址间的关系 (案例图解,动画过程、配套仿真)
- Java技术:汉字转拼音码
- Linux解压方式大全
- Crystal Xcelsius 数据展现的魅力
- OSPF Stub Area 教程图解 (实例、动画过程、仿真)
- Porting Wifi driver on Android