对char x='abcd'的解释

- 日理万妓 2022-09-30 04:54 247阅读 0赞

问题:
char x=’abcd’;
x=?

答案是:x=d;
为什么呢?

详解:
char x=’abcd’中的’abcd’被存储为一个int型的整数,这个整数的值是:
一个int数值 :(97<<8<<8<<8)+(98<<8<<8)+(99<<8)+100);
其中97是’a’的ASCII码;
其中98是’b’的ASCII码;
其中99是’c’的ASCII码;
其中100是’d’的ASCII码;
因为x是char型的,只有8位,故截取该int的低八位,即’d’的ASCII码100存入x。
下面一段程序证明之:

#include int main(int argc, char \argv[]) { char x=’abcd’; printf(“%d /n”,’abcd’); printf(“%d /n”,(97<<8<<8<<8)+(98<<8<<8)+(99<<8)+100); printf(“%c /n”,x); return 0; }*

输出:
1633837924
1633837924
d

还有个疑问就是为什么’abcd’被存储为int型,这与为什么#define N 123中的sizeof(N)=4和#define PI 3.14159中的sizeof(PI)=8是一个道理,凡是常量,编译器都会给它找一个合适的数据类型,也就是多少位存储空间来存放它。’abcd’中的字母的ASCII码是整数的,所以就分配了int型的存储空间给它,int是32位的,最多放4个char型数据,再多了就放不下了,这就是为什么上面的语句char x=’abcd’最多只能赋值4个字母的原因,再多了编译器就报错,因为存储空间不够了。

我们最近考试的那个char c=’/0xab’与上面是同一种情况,只不过四个字母变成了’/0’,’x’,’a’,’b’罢了。
其实,平时我们写程序根本不会这么写,但遇到了,还是要分析出来。

发表评论

表情:
评论列表 (有 0 条评论,247人围观)

还没有评论,来说两句吧...

相关阅读

    相关 NULL彻底解释

    NULL代表不知道或者没有定义,和空值完全不同。例如,在数据库中某字段取值为NULL,代表用户还没有处理这个字段的数据,有待于处理;而如果该字段取值为空,代表这个字段的数据用户