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

Rob*_*ert 4 c logical-operators

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

(if i==4 && j==9)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

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

它是否与双&符号&&做同样的事情,如果不是它做了什么?

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

Jer*_*fin 9

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

在这种情况下,从改变这个&&&不应该改变多少.这会改变最重要的事情是,随着&&中,j==9将只如果所评估的i==4部分是真实的,但是&,他们都会在不考虑评估.

当你有类似的东西if (x != NULL && x->whatever ...)你想要确保第二部分(解除引用x)只被评估,如果x不是空指针.但是,在你的情况下,比较似乎是ints的东西不太可能产生任何问题.

当你处理可能产生除1信号之外的其他值的东西时,也可能遇到问题true.同样,这不是问题,因为它==总是产生0或者1.如果(例如)您正在使用isalpha,islower等等,<ctype.h>则只需要生成0或非零值.如果你将它们与a组合在一起&,你会得到一个or可以为两个非零输入产生0 的位(例如1 & 2 == 0,但是1 && 2 == 1).

当您and对结果使用按位时==,您将获得0 & 00 & 11 & 01 & 1.1 & 1将屈服1(真实).所有其他人将产生0(假)---就像&&会有的那样.


ale*_*lex 5

它正在执行按位AND.

它在做什么是表达i == 4相当于1如果i4和同为RHS(有j9,很明显).该&操作符返回,其中两个操作数有对位的数量.

它的工作方式与&&因为00000001 & 00000001(例如,缩小到一个字节)相同.如果一个人0(条件是假的),那么&将不会看到两位开启两个操作数,并且000000000,这是falsey.

但是,不要简单地使用,&因为它是一个较短或类似的字符.使用它是因为它表达了您想要实现的目标.如果它是您想要的逻辑AND,请使用&&.

同样的事情适用于|,除非结果位如果每个操作数都打开它,如果任一操作数打开该位,它将打开它.