在这个 if 条件下我要问什么?

What do I ask in this if condition?

我得到了以下代码:

if (a & 1){
...
}

但是我什么时候进入 if 条件?没有 ==!=。我很迷茫... 我什么时候进入 if 条件,什么时候不进入。

if (a & 1){
    ...
}

正在检查a是奇数还是偶数。 & 是按位与运算符。如果a是奇数,那么a&1产生1,a是偶数,那么a&1产生0。

a转为二进制。然后用1做AND运算。

A​​ND 运算如下:

0 & 0 = 0;
0 & 1 = 0;
1 & 0 = 0;
1 & 1 = 1;

如果a是奇数,那么a[=28的LSB一定有一个1 =].否则 LSB 将为 0。

在 C 中,任何非零表达式都被认为是真的。

这里我有一个例子给你:

int a = 5;
if(a & 1)
{
        printf("hello");
}
else
{
        printf("where am I?");
}

你得到一个整数a,它是5。5的二进制数是0101。你得到1。1的二进制数是0001。 现在对这两个进行二进制 AND 运算:

    0101
&   0001
_________
    0001

AND运算的展开:

0 & 0 -> 0;
0 & 1 -> 0;
1 & 0 -> 0;
1 & 1 -> 1;

现在我们看到了。每次我们的整数末尾有一个 1(这里是整数 a = 5),我们都会得到一个末尾有 1 的解。 在 C 中:如果您询问的条件(此处 a & 1)是 TRUE,则您进入 if 条件。如果您收到 1,则条件为真。 所以,每次你收到一个 1 (000000...001 也是一个 1)你打印 "hello" 如果你得到除了 1 之外的任何东西(例如 4 & 1 -> 0100 & 0001 = 0000 -> 收到一个 0) 你打印出来 "where am I?".