在C是&逻辑和(&&)的简写?

时间:2012-12-19 02:19:26

标签: c logical-operators

有时我想做这样的事情(i和j是整数)。

(if i==4 && j==9)
{
   ...
}

如果i等于4且j等于9,它将通过括号。我一直使用单个&符号(&)而不是double符号,我的代码已经编译并运行。

它是否与双号&&&&&&&&&&&&&&&&&

编辑:哦,我一直在做同样的事情或者,使用'|'而不是'||'

4 个答案:

答案 0 :(得分:9)

大概你的意思是if (i==4 && j==9)

在这种情况下,将其从&&更改为&不应更改。最重要的是,使用&&时,只有j==9部分为真,i==4只有&部分,而if (x != NULL && x->whatever ...)部分才会被评估,它们都会被评估无论如何评估。

当你有类似x之类的内容时,你想确保仅在x不是空指针时才评估第二部分(解除引用int)。但是,在您的情况下,比较看似1的内容不太可能产生任何问题。

当您处理可能产生true以外的值的信号==时,也可能遇到问题。同样,这不是问题,因为0将始终生成1isalpha。如果(例如)您使用的islower<ctype.h>等来自0,则只需要生成&或非零值。如果你将它们与or组合在一起,你会得到一个有点1 & 2 == 0,它可以为两个非零输入产生0(例如1 && 2 == 1,但是and )。

当您对==的结果使用按位0 & 0时,您将获得0 & 11 & 01 & 1或{{1} }。 1 & 1将产生1(真)。所有其他人都会得到0(假)---就像&&一样。

答案 1 :(得分:5)

正在执行bitwise AND

如果i == 41,则表达式i等同于4,而对于RHS(j和{{ 1}},显然)。 9运算符返回两个操作数都具有该位的数字。

它的作用与&相同,因为&&(例如缩小到一个字节)是相同的。如果一个是00000001 & 00000001(条件为假),那么0将不会看到两个操作数都打开了两个位,而&00000000,这是< EM> falsey

,不要只使用0,因为 一个字符或类似。使用它是因为它表达了您想要实现的目标。如果它是您想要的逻辑AND,请使用&

同样的事情适用于&&,除非结果位如果每个操作数都打开,否则如果任一操作数打开该位,则将其打开。

答案 2 :(得分:2)

单个&符号按位AND。只有当两个操作数在该位置都有1时,才会设置结果的每一位。

由于C中的比较返回1表示为真,0表示假,&将给出与&&相同的结果,只要两个操作数都是比较。但对于任意值,它将返回看似随机的结果。 1 && 2为真,但1 & 2为假,因为1和2的二进制表示没有共同的位。

答案 3 :(得分:0)

单个&符号称为按位和。它是一个二进制运算符,可以逐位'和'两个数字。

例如,如果你有两个二进制数,01100010和00011111,你的按位并将导致00000010

i == 4返回1(真),j == 9。所以,我= = 4&amp; j == 9真的只是1&amp; 1,评估为1(真)。

尝试这些示例以查看差异

1)int k = 4&amp; 6; vs int k = 4&amp;&amp; 6;

2)if(i == 4&amp;&amp; 2)vs if(i == 4&amp; 2)