我收到了以下代码:
==
但我什么时候进入if条件?没有!=
或db_connection()
。我很迷茫...
我何时进入if条件,何时不进入。
答案 0 :(得分:7)
在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?"
。
答案 1 :(得分:2)
if (a & 1){
...
}
正在检查,如果 a 是奇数还是偶数。 & 是按位AND运算符。如果 a 是奇数,那么& 1产生1而 a 是偶数,则& 1产生0。
将 a 转换为二进制文件。然后用1进行AND操作。
AND操作就像这样:
0 & 0 = 0;
0 & 1 = 0;
1 & 0 = 0;
1 & 1 = 1;
如果 a 是奇数,则 a 的LSB中必须有 1 。否则LSB将为0.