c语言的位运算疑惑

#include<stdio.h>main(){charx=040;printf("%d\n",x=x<<1);}的运算结果为什么是64啊,在线求解... #include<stdio.h>
main()
{char x=040;
printf("%d\n",x=x<<1);
}
的运算结果为什么是64啊,在线求解
展开
 我来答
Negamax
2012-03-23 · TA获得超过2723个赞
知道小有建树答主
回答量:656
采纳率:100%
帮助的人:350万
展开全部
恩。分析下思路。先针对你的这个题目。
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,所以是数字。而不是字符

希望你能明白!打字好累啊!
zhangdebo321
2012-03-23 · TA获得超过203个赞
知道小有建树答主
回答量:262
采纳率:100%
帮助的人:210万
展开全部
char c=040即整数32;左移一位相当于乘法*2^1,所以为64.只要知道一位运算其实是乘法和除法,自己类比一下十进制后面加几个0,减几个0,其实就是移位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zyh1141298056
2012-03-23 · TA获得超过1308个赞
知道小有建树答主
回答量:500
采纳率:100%
帮助的人:636万
展开全部
x=040,是八进制的表示方法,也就是x=32,x<<1就是将它的二进制左移一位,也就相当于乘以了2,所以昌64
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清丽又舒坦丶小喵Q
2012-03-23 · TA获得超过224个赞
知道小有建树答主
回答量:89
采纳率:0%
帮助的人:116万
展开全部
040是八进制数,转化为十进制为32。x=x<<1意思是将x左移移位,左移一位在十进制角度为变为原来的2倍,即32*2=64.
追问
八进制能不能直接进行位运算啊,就是不通过转换成十进制和二进制进行位预算,感觉八进制转化成二进制太复杂了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
唐博1347
2012-03-23 · TA获得超过799个赞
知道小有建树答主
回答量:205
采纳率:0%
帮助的人:308万
展开全部
因为你的x =040,代表x是一个八进制的数,040相当于十进制的32,移位之后就是64了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式