C语言自学中。。。。。
C primer plus第三章中写道:
奇怪的是C语言将字符常量视为int类型而非char类型。
例如在int位32位 char为8位的ASCII系统中有下面代码
char grade = ‘B‘,
本来‘B’对应的66储存在32位的储存单元中,现在却可以储存在八位的单元中(grade)。利用字符常量的这种特性,可以定义一个字符常量'FATE',即把四个独立的八位ASCII码储存在一个32位存储单元中。如果把这样的字符常量赋给char类型变量grate,只有最后八位有效。因此,grade的值是'E'。
这段话怎么理解,为什么B就变成了E了,
66的二进制是1000010 八位储存是01000010
那FATE就是四个01000010
那么后八位是不是还是01000010吗?
那么为什么grade的值会变成‘E’
E的ASCII是69,换成二进制储存是01000101难道后八位是这个?
求解答!!!!!!!谢谢!!!!!!
他的意思是
#include <stdio.h>
int main()
{
char ch2 = 'FATE';
char grade = 'B';
printf("%c\n", grade);
grade = ch2;
printf("%c\n", grade);
return 0;
}
结果是
B
E
短短一小段程序,你要理解内存怎么分布的,ascii怎么回事,还有,你用的X86 CPU是一种little endian的处理器。所以明明是 FATE 结果 E 跑前面去了,你一个不理解,就完全不理解。更糟糕的是,万一你用了手机写程序,而手机是 big endian的,那么结果输出就是BF了。
初学者学 C语言能学到怀疑人生。
顺便说一下,C语言不适合自学,学了也没啥卵用。
很多人反驳说,C语言可以写操作系统啊,问题是你一个初学者又不是奔着为国家编写操作系统的使命去的,写操作系统和你有一毛钱关系不?
如果你学C语言感觉困难很大,建议你换一种语言。