Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 操作员的特殊用途&;及==_C - Fatal编程技术网

C 操作员的特殊用途&;及==

C 操作员的特殊用途&;及==,c,C,我不理解在下面的代码段中运算符&and==的用法: Static boolean foo(){ long stat; /* ...code*/ if (!(stat & 1)){ /* code... */ } return (stat == SOME_MACRO); } 在if比较中做什么 ==在内部做什么 返回 提前感谢。&是一个按位AND,用于测试是否设置了stat的最低有效位 如果stat等于toSOME宏的值,则

我不理解在下面的代码段中运算符&and==的用法:

Static boolean foo(){

    long stat;
    /* ...code*/

    if (!(stat & 1)){
     /* code... */
    }

     return (stat == SOME_MACRO);
 }
  • 在if比较中做什么
  • ==在内部做什么 返回

提前感谢。

&
是一个按位AND,用于测试是否设置了stat的最低有效位

如果
stat
等于to
SOME宏的值,则
=
使函数返回
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,很好的定位。我应该知道先检查一下标准!=)