#include
void main() {
int a = 7, b = 3;
printf("%d", a & b + a * (!a | b));
}
为什么打印出的是0?不是(!a | b)中的!和a先结合吗?
不应该是这样printf("%d", 3 + 7 * 3)吗?
- 首先括号的优先级最高,先计算括号内的; 然后括号内 ! 的优先级最高, 先计算 !a。 括号内相当于 0 | 3
- 0000 | 0011 = 0011 = 3
- 然后表达式 7 & 3 + 7 * 3 , 乘号的优先级最高,计算得出 7 & 3 + 21;
- 接着表达式 7 & 3 + 21 ,加号的优先级最高,计算得出 7 & 24;
- 最后 表达式 7 & 24;
- 00000111 & 00011000 = 00000000 = 0【十进制数】
要注意 &的优先级比+ 高
不知道你这个问题是否已经解决, 如果还没有解决的话: