在这个 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运算。
AND 运算如下:
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?"
.
我得到了以下代码:
if (a & 1){
...
}
但是我什么时候进入 if 条件?没有 ==
或 !=
。我很迷茫...
我什么时候进入 if 条件,什么时候不进入。
if (a & 1){
...
}
正在检查a是奇数还是偶数。 & 是按位与运算符。如果a是奇数,那么a&1产生1,a是偶数,那么a&1产生0。
将a转为二进制。然后用1做AND运算。
AND 运算如下:
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?"
.