C 操作员的特殊用途&;及==
我不理解在下面的代码段中运算符&and==的用法:C 操作员的特殊用途&;及==,c,C,我不理解在下面的代码段中运算符&and==的用法: Static boolean foo(){ long stat; /* ...code*/ if (!(stat & 1)){ /* code... */ } return (stat == SOME_MACRO); } 在if比较中做什么 ==在内部做什么 返回 提前感谢。&是一个按位AND,用于测试是否设置了stat的最低有效位 如果stat等于toSOME宏的值,则
Static boolean foo(){
long stat;
/* ...code*/
if (!(stat & 1)){
/* code... */
}
return (stat == SOME_MACRO);
}
- 在if比较中做什么李>
- ==在内部做什么 返回
提前感谢。
&
是一个按位AND,用于测试是否设置了stat的最低有效位
如果stat
等于toSOME宏的值,则=
使函数返回1
(意思是“true”)。否则它返回0
(表示“false”)。如果(状态&1)
相同,如果状态为奇数,则返回
return(stat==SOME_宏)代码>与相同
if (state == SOME_MACRO)
return true;
else
return false;
说明:任何奇数的二进制表示在其最后一位都有一个1。比如说,
3 = 11
5 = 101
7 = 111
如果您已经知道&
的功能,您会注意到,当您执行n&1
时,除最后一位之外的所有位都设置为零,最后一位保持不变。因此n&1
返回n
的最后一位,如果n
为奇数,则返回1
,如果n
为偶数,则返回0
如果表达式为true,则(state==SOME_MACRO)
将计算为true
,如果表达式为false,则计算为false
。因此,它将返回true
或false
,这取决于状态
是否等于某个宏
。按位AND>运算符将其第一个操作数的每一位与第二个操作数的对应位进行比较。如果两个位都是1,则结果的对应位设置为1。否则,它将相应的结果位设置为0
如果stat等于某个_宏,则函数将返回true,否则返回false这不是真正的“特殊用途”。他们总是做同样的事情。这可能是一个有用的好答案,谢谢!您不应该依赖布尔真值等于1。根据C标准,任何非零值的计算结果都为true。大多数编译器会在布尔表达式上为true生成1,但这并不能保证。任何非零值的计算结果都是true,但我认为true的计算结果总是为1@sh1ftst0rm:The=
将只生成1或0(6.5.9/3)。@JohnBode:Ah-ha,很好的定位。我应该知道先检查一下标准!=)