又一问题.类型转换问题:PPPPPP
main(){
int a,b=322;
float x,y=8.88;
char c1='k',c2;
a=y;
x=b;
a=c1;
c2=b;
printf("%d,%f,%d,%c",a,x,a,c2);
结果是107,322.000000,107,B
为什么是107呢???第一个不是应该等于8吗?
是不是k是107啊??
main(){
int a,b=322;
float x,y=8.88;
char c1='k',c2;
a=y;
x=b;
a=c1;
c2=b;
printf("%d,%f,%d,%c",a,x,a,c2);
结果是107,322.000000,107,B
为什么是107呢???第一个不是应该等于8吗?
是不是k是107啊??
2007-08-04 09:27
[此贴子已经被作者于2007-8-4 9:55:15编辑过]

2007-08-04 09:43
2007-08-04 09:50
2007-08-04 09:54
b 等于 322,换算成16进制是0x00000142(假设int型是32位)
c2=b;由于c2为char型,一般char都是8位,这样一个32位的数据要赋值给一个8的数据,要进行强制数据类型转换,显然只能把其中的8位赋给它,那么到底把那哪8位赋给它呢?这个就涉及到 一个 所谓 CPU是“大端模式”还是“小端模式”
在“大端模式”下,从最高位开始赋值,也就是说把高8位赋给c2,这样c2的值就是0x00。
在“小端模式”下,从最低位开始赋值,也就是说把低8位赋给c2,这样c2的值就是0x42。
楼主的CPU显然是“小端模式”,所以得到c2的值为0x42,(intel,arm 处理器都是小端模式)

2007-08-04 10:46
2007-08-04 19:27
2007-08-04 20:46
呵呵,也可以说是循环,如果要书面语,就是所谓的溢出了.
2007-08-04 20:58