"&"运算符在此C++代码中的重要性
The significance of `&` operator in this C++ code
我看到一些代码如下:
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
的第一位是什么。
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 在Linux for Windows上编译C++代码时出错
- 我的字符计数代码计算错误.为什么
- 孤立代码块在结构中引发异常
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 此代码是否违反一个定义规则
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 为什么在这个代码结束循环中没有得到结束
- "&"运算符在此C++代码中的重要性
- 以下代码片段中 push(po[i]-'0') 对评估后缀表达式的重要性是什么