
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啊,在线求解 展开
main()
{char x=040;
printf("%d\n",x=x<<1);
}
的运算结果为什么是64啊,在线求解 展开
8个回答
展开全部
恩。分析下思路。先针对你的这个题目。
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: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,所以是数字。而不是字符
希望你能明白!打字好累啊!
展开全部
char c=040即整数32;左移一位相当于乘法*2^1,所以为64.只要知道一位运算其实是乘法和除法,自己类比一下十进制后面加几个0,减几个0,其实就是移位。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
x=040,是八进制的表示方法,也就是x=32,x<<1就是将它的二进制左移一位,也就相当于乘以了2,所以昌64
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
040是八进制数,转化为十进制为32。x=x<<1意思是将x左移移位,左移一位在十进制角度为变为原来的2倍,即32*2=64.
追问
八进制能不能直接进行位运算啊,就是不通过转换成十进制和二进制进行位预算,感觉八进制转化成二进制太复杂了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为你的x =040,代表x是一个八进制的数,040相当于十进制的32,移位之后就是64了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询