我看到了一些像这样的代码:
void testCase2 (int variant)
{
if (variant & 0x1)
{
return;
}
}
&
运算符在if语句中的含义是==
吗?为什么要使用&
?
答案 0 :(得分:1)
这是一个“按位和”,基本上代码将检查'variant'中的最低有效位是否已设置。
操作员对要比较的两个项目的每个相对位执行AND运算以获得结果。这是检查用于携带多个“标志”的变量的常用方法。
作为一个例子,“按位和”使用这些二进制表示的两个变量:
00010001
00000001
会给:
00000001
答案 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。