c语言的位运算疑惑

#include<stdio.h>
main()
{char x=040;
printf("%d\n",x=x<<1);
}
的运算结果为什么是64啊,在线求解

恩。分析下思路。先针对你的这个题目。
1:040 是八进制的表示。换成十进制是 4*8+0*1=32
2:ASCII编码表中 32表示的是空格符号。 char中寸的是ASCII编码,所以是32
3:位移运算:>>表示右移位
我以8为例。8的二进制是1000, 8>>1对应的二进制形式就是1000——0100看到变化了没有。
所以右移位相当于这个数除2
左移位你看看 01000——10000是16了。相当扩大一倍。
32的二进制是 0010 0000左移1位 01000000你看看是不是64
4:最后打印的是%d,所以是数字。而不是字符

希望你能明白!打字好累啊!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-23
char c=040即整数32;左移一位相当于乘法*2^1,所以为64.只要知道一位运算其实是乘法和除法,自己类比一下十进制后面加几个0,减几个0,其实就是移位。
第2个回答  2012-03-23
x=040,是八进制的表示方法,也就是x=32,x<<1就是将它的二进制左移一位,也就相当于乘以了2,所以昌64
第3个回答  2012-03-23
040是八进制数,转化为十进制为32。x=x<<1意思是将x左移移位,左移一位在十进制角度为变为原来的2倍,即32*2=64.追问

八进制能不能直接进行位运算啊,就是不通过转换成十进制和二进制进行位预算,感觉八进制转化成二进制太复杂了

第4个回答  2012-03-23
因为你的x =040,代表x是一个八进制的数,040相当于十进制的32,移位之后就是64了
相似回答