关于#位运算符#的问题


#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【十进制数】

要注意 &的优先级比+ 高

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^