-1

我不明白以下代码中运算符 & 和 == 的用法:

Static boolean foo(){

    long stat;
    /* ...code*/

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

     return (stat == SOME_MACRO);
 }
  • 在 if 比较中 & 做什么?
  • == 在 return 里面做了什么?

提前致谢。

4

3 回答 3

3

&是一个按位与,它正在测试是否设置了最低有效位stat

如果等于 to 的值,则==使函数返回1(意思是“真”)。否则返回(意思是“假”)。statSOME_MACRO0

于 2013-09-05T13:48:01.830 回答
1

&(按位与)运算符将其第一个操作数的每个位与第二个操作数的相应位进行比较。如果两个位都是 1,则结果的相应位设置为 1。否则,它将相应的结果位设置为 0。

如果 stat 等于 SOME_MACRO,该函数将返回 true,否则返回 false

于 2013-09-05T13:49:25.893 回答
1

if (state & 1)是一样的if state is odd

return (stat == SOME_MACRO);

if (state == SOME_MACRO)
    return true;
else
    return false;

解释:任何奇数的二进制表示形式的最后一位都是 1。例如,

3 = 11
5 = 101
7 = 111

如果您已经知道是做什么&的,您会注意到,当您执行 时n & 1,除最后一位之外的所有位都设置为零,并且最后一位保持不变。所以n & 1返回最后一位n1如果n是奇数,0如果n是偶数。

如果表达式为真,(state == SOME_MACRO)将评估为,如果表达式为假,则评估为。所以它会返回或者取决于是否等于或不返回。truefalsetruefalsestateSOME_MACRO

于 2013-09-05T13:48:42.613 回答