这个C ++代码中`&`运算符的意义

时间:2015-03-18 11:25:19

标签: c++

我看到了一些像这样的代码:

void testCase2 (int variant)
{    
  if (variant & 0x1)
  {
    return;
  }
}

&运算符在if语句中的含义是==吗?为什么要使用&

4 个答案:

答案 0 :(得分:1)

这是一个“按位和”,基本上代码将检查'variant'中的最低有效位是否已设置。

操作员对要比较的两个项目的每个相对位执行AND运算以获得结果。这是检查用于携带多个“标志”的变量的常用方法。

作为一个例子,“按位和”使用这些二进制表示的两个变量:

00010001
00000001

会给:

00000001

http://en.wikipedia.org/wiki/Bitwise_operation#AND

答案 1 :(得分:1)

&是按位AND运算符。给定两个整数操作数,它对每个位位置执行AND运算,即在结果中只设置那些在两个操作数中设置的位。

如果其中一个操作数是0x1,那么结果将是0x1当且仅当设置在其他操作数(此处为variant)。

由于C / C ++将任何非零整数视为true

if (variant & 0x1)

检查variant中的最低有效位是否已设置。

类似地,

if (variant & 0x2)

会检查variant第二个最低有效位是否已设置,

if (variant & 0x3)

将检查variant中两个最低有效位的是否

答案 2 :(得分:0)

&运算符是布尔算术AND运算符,即按位AND

在您的代码块中,if (variant & 0x1)被评估为:

if (the result of ANDing variant and 0x1) is TRUE, them go inside the following block of code.

请考虑以下代码(请参阅IDEONE中的操作):

#include <iostream>
using namespace std;

int main() {
    int variant = 0x1f; // Declared in HEX format;

    if (variant & 0x1){ // If the LSB is 1 i.e. if the 
        cout << "axious!!!";  // It'll print "axious!!!"
    } else
    {
        cout << "It's something else!!!";
    }

    return 0;
}

但是以下代码:

#include <iostream>
using namespace std;

int main() {
    int variant = 0x10; // Declared in HEX format;

    if (variant & 0x1){ // If the LSB is 1
        cout << "axious!!!";
    } else
    {
        cout << "It's something else!!!"; // This will be printed!!
    }

    return 0;
}

现在请记住,0x1在二进制中为1,即LSB为1,因此您实际上正在检查variant的第一位是什么。

答案 3 :(得分:0)

variant:      1011   Bitwise AND         
  0x1  :      0001
            -------
              0001
            -------

按位AND用于关闭位。

  

按位AND运算符是单个&符号:&amp ;.一个方便的助记符是布尔AND和&amp;&amp;的小版本适用于较小的部分(比特而不是字节,字符,整数等)。本质上,二进制AND简单地采用二进制形式的数字的每个位置中的位的逻辑AND。

SRC : refer here