C语言的一道题

main()
{int x=321;
char y;
y=x;
printf("%d,%c\n",y,y);}
结果是65,A 能告诉我是怎么算出来的吗

刚和同学讨论出答案,回答后发现还是答晚了~~~
由于ASCII表有从0—255,一共226个字符。你把321赋值给y,但y是字符型。所以,相当于是把ASCII码值为321的字符赋值给y。数据要溢出,于是有321-226=65,所以y此时的值为65 。又“A”的ASCII值为65。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2006-10-15
321 的2进制编码是101000001,char型只取后8位,01000001,换算成10进制就是65,所以结果是65
第2个回答  2006-10-15
char y;
中y最大是255
当把int x=321赋给y时
溢出321-255=65
65在char里表示的是A
也就会有这个结果
第3个回答  2006-10-15
在普通的intel32位机器上,int占用2个字节,
char占用一个字节,而intel处理器为小端模式,
也就是,在内存中类似下面的情况
地址:3220313827 3220313828
值: 01000001 00000001
x的地址为3220313827,y的地址也为3220313827
明白了吧?
其实这样的程序没有任何意义,因为在不同的硬件平台上的结果可能是不一样的,甚至换一个编译器都可能不一样。

http://herofit.blogspot.com/
第4个回答  2006-10-15
int i=321那么i在计算机中占16个bit即000000101000001
char y那么y在计算机中占8个bit也就是i的后八位01000001所以y是65
后面,我就不说了啊!
第5个回答  2006-10-15
是不同数据类型间付值的问题,就是把整型321付给字符型的y,然后显示y的值,因为字符型最大为255,也就是2进制的11111111,所以溢出,用321-255=65,所以y值是65,这个是第一个显示整形的结果,另外字符型结果就是因为“A”的ascll码的值为65.
相似回答