具有and和位到位-C代码的条件

具有and和位到位-C代码的条件,c,C,我想知道这个代码的作用 if(a & b) {....} 其中a和b都是int 执行该条件所需的(a&b,例如8位)值必须是多少。它执行AND操作() 这是AND门的真值表 +----------+-----------+-------------+ | X | Y | X & Y | +----------+-----------+-------------+ | 0 | 0 | 0

我想知道这个代码的作用

if(a & b) {....}
其中
a
b
都是
int


执行该条件所需的(
a&b
,例如8位)值必须是多少。它执行AND操作()

这是AND门的真值表

+----------+-----------+-------------+
|     X    |     Y     |    X & Y    |
+----------+-----------+-------------+
|     0    |     0     |      0      |
|     0    |     1     |      0      |
|     1    |     0     |      0      |
|     1    |     1     |      1      |
+----------+-----------+-------------+
现在,按位的
&
取任一侧两个数字的二进制,并对其对应的每个位执行and。比如说

   0011 0110                   //  54
 & 0001 0001                   //  17
---------------
   0001 0000                   //  16
因此,要满足您的条件(
if(a&b)
)的示例如下

a = 3;
b = 1;
所以

这是1,这是
真的

失败的唯一条件是
a
b
的所有对应位不相同或为零

比如说,

a=3;
b=4;
所以

它是0,因此
false
,只要结果为false,if语句就不会执行


因此,对于除0以外的
a&b
的任何值,如果执行了条件。

一个示例应阐明:

a  =0b 1111 0000
b  =0b 0001 0001
a&b=0b 0001 0000

只有当a和b中的第n位均为1时,a和b中的第n位才为1。如果值a和b不同于0,则If语句将是真实的。

您做过一些研究吗?
   0000 0011         //   3
 & 0000 0100         //   0
----------------
   0000 0000         //   0
a  =0b 1111 0000
b  =0b 0001 0001
a&b=0b 0001 0000