在这个条件下我该问什么?

时间:2015-10-27 08:12:15

标签: c binary bit-manipulation

我收到了以下代码:

==

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

2 个答案:

答案 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.