"&"运算符在此C++代码中的重要性

The significance of `&` operator in this C++ code

本文关键字:重要性 代码 运算符 C++      更新时间:2023-10-16

我看到一些代码如下:

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

如果语句中的&运算符是什么意思,它是==吗?为什么要使用&

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

如果其中一个操作数是0x1(在这种情况下),则结果将是0x1,如果且仅当该位也是另一个操作数(此处为variant)中的设置。

由于C/C++认为任何非零整数都是true

if (variant & 0x1)

检查是否设置了CCD_ 9中的最低有效位。

类似地,

if (variant & 0x2)

将检查是否设置了variant中的第二个最低有效位,并且

if (variant & 0x3)

将检查是否设置了CCD_ 11中的两个最低有效位中的之一

这是一个"按位和",基本上代码会检查是否设置了"variant"中的最低有效位。

运算符对正在比较的两个项目的每个相对位执行AND运算以获得结果。这是检查用于携带多位"标志"的变量的常用方法。

举个例子,用以下二进制表示"按位安定"两个变量:

00010001
00000001

会给出:

00000001

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

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

逐位AND用于关闭位。

按位AND运算符是一个单安培数:&。一个方便的助记符是布尔AND的小版本,&,处理较小的部分(比特而不是字节、字符、整数等)。本质上,二进制AND只是以二进制形式对数字的每个位置的位进行逻辑AND

SRC:请参阅此处

&运算符是布尔算术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的第一位是什么。