关于C语言中位运算的问题,各位高手帮帮忙~~~

来源:百度知道 编辑:UC知道 时间:2024/05/22 02:31:57
请帮忙看看这个程序,我读出来的结果一直不对,请高手们帮忙讲讲具体的运算过程吧~~~谢谢~~~

#inclide <stdio.h>
main()
{int a=10,b=21,c,n=3;
a&=b;
b|=a;
printf("a=a&b=%d,b=b|a=%d\n",a,b);
a>>=n+1;
b<<=n+1;
printf("a=a>>n+1=%d,b=b<<n+1=%d\n",a,b);
a=~a;
b^=a;
printf("a=~a=%d,b=b^a=%d",a,b);
}

运行结果是什么?为什么?我做出来一直跟答案不对呢?
谢谢pengxuan321,对于这个位运算的知识我完全是昏的,第一步的b=b|a=21,我就做错了,我做出来是31,自然后面的答案都是错的,严重的是我竟然没有搞懂我错在哪里,麻烦帮忙讲一下吧,非常感谢~~~

输出:
a=a&b=0,b=b|a=21
a=a>>n+1=0,b=b<<n+1=336
a=~a=-1,b=b^a=-337

你在那一条对不上答案,补充下提问。
我再具体给你解答。

********************************
补充回答:
a的二进制码:01010
b的二进制码:10101
a&b即a和b按位与运算全为0,转换成十进制就是0
b|a即a和b按位或运算此时
b能为:10101
a已经为:全零了
或运算就是21
>>是按位右移,
<<是按位左移
^是按位亦或
~是按位取反
你还是详细的看看看书的比较好。
加油吧~!