c语言中一道疑惑的选择题

来源:百度知道 编辑:UC知道 时间:2024/06/04 04:59:50
设有以下语句:int x=03,y=02,z=01;那么语句printf("%d",x|y&~Z)的执行结果?
A.1
B.2
C.3
D.0
为什么选C。。。
不明白

这是逻辑位运算符的问题
先将x y z都转换为二进制的数
x 0000 0011
y 0000 0010
z 0000 0001

~Z 1111 1110
y&~Z 0000 0010
x|y&~Z 0000 0011
转换为十进制 等于3
运算符的优先级~ >&>|
懂了给面红旗!谢谢

这个问题考察的是位运算,首先我们要明白优先级关系是:~>&>|;因此在该体重,对于x|y&~Z的计算是从右往左的计算顺序;

取每个整数的低3位,则x为011,y为010,z为001
第一步:~z为110
第二步:y&~Z为010
第三步:x|y&~Z为011

因此最后的值为3。

首先用2进制表示
x=0000000000000011,y=0000000000000010,z=0000000000000001
x|y 按位或 = x
~z = 1111111111111110
x&(~z) 按位与 = x

先看看运算符号的优先级
应该是~(取反运算符)优先级最高,|(或运算符)优先级最低
z=01,Z取反等于0 ~Z=0
y=02,Y和0(~Z)相与等于0 y&~Z=0
x=03,X和0(y&~Z)进行或运算等于3
输出3

好变态的题目..

~z是什么```