C语言位运算问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 07:13:00
设有以下语句:
int x=03,y=02,z=01;
那么语句printf("%d",x|y&~z)的执行结果( )。
(A) 1 (B) 2 (C) 3 (D) 0、 答案是C
请问这是怎么计算的啊。我怎么觉得最后的结果应该是0啊。

int x=03,y=02,z=01;

运算符~的优先级最高,次之是&,最后是|
x的二进制的后4位是0011
y的是0010
z的是0001
先算~z,~0001=1110
然后y和它进行与运算,1110&0010=0010
然后执行x和它的或运算,0011|0010=0011
0011就是3,所以结果是3

x|(y&(~z))

结果是3.
~的级别最高先算,则~z=0;
&的级别第2,则y&~z=y&0=0;
|的级别第3,则x|y&~z=3|0=3;