C语言难题

有个程序我看不懂,请教专家
main()
{char x=0x50,y;
y=x<<2;
printf("%d\n",y);
}

运行结果是64,为什么么?

x = 0x50 是说x等于十六进制的“50”,即十进制的80(5×16+0=80)

y=x<<2中的“<<”叫左移运算符(下面链接中的第5个)是指把80化为二进制,即“1010000”后向左移两位得到“101000000”。

y是char型的,所以y的大小只有8位(1字节)。所以“101000000”中只有最后8位存进了y变量中。即y=01000000化为十进制就是64。

参考资料:http://zhidao.baidu.com/question/32807257.html?si=3

温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-08-22
x的二进制为0101 0000,向左移动两位为0100 0000
这就是y的值,十进制就是64
第2个回答  2008-08-22
0x50是十六进制数,也就是十进制的80
80 = 01010000,
x<<2就相当于01010000左移两位
低位补0,得01000000
即 01000000
十进制即64
第3个回答  2008-08-22
0x50=5*16=80(dec) 80<<2=64[左移两位,首位正负位不变] %d表示以整形输出。
第4个回答  2008-08-22
<<是位运算.
第5个回答  2008-08-22
0x50左移2位就是二进制101000000 咯
y 是char,8bits,所以就是 01000000 咯 十进制就是64咯
相似回答