又一问题.类型转换问题: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啊??
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 处理器都是小端模式)