和在C++的含义
meaning of & in C++
我对在某些C++代码中找到的表达式有点困惑:
if (m & 1)
pmm=-pmm;
我不是C/C++程序员,所以Google给了我两件事:
- 并且是按位和
-
if
语法if (condition) statement
那么,上述说法是如何运作的呢?我不应该要求if ((m & 1)==0)
吗?
为了补充更多的技术解释,一种更简单的查看if (m & 1)
方法是测试m
是否奇数(即不是 2 的精确倍数):
if (m & 1)
// m is odd (1, 3, 5, 7, 9, ...) - do something
else
// m is even (0, 2, 4, 6, 8, ...) - do something else
m 将在内存中表示为二进制数,换句话说:一系列位。值 1 也将表示为一系列位。
例如(为简单起见,我选择了 8 位长度):
m = 00101101
1 = 00000001
对 m 执行按位运算将执行您指定的运算,在本例中为 & (AND ) 在 & 符号两侧每个二进制数的相同位置的每个位上执行
。即结果的第 1 位 = m 的位 1 和值 1 的位 1。结果的第 2 位 = m 的第 2 位和值 1 的位 2 等...
所以对于我们的例子:
00101101
& 00000001
---------
00000001
假设 m 是整数,则按位运算将返回一个整数。if 语句将检查结果是否为真,并且由于它是一个整数,如果非零,它将被解释为 true。
结果不为零,因此在我们的示例中它将返回 true。
所以:通过用 1 与整数进行 AND-运算,您最终只会在代码中为奇数返回 true,因为对于奇数,位 1 始终为 1。
这是按位 AND 运算符。 如果设置了位 0,并且每个非 0 的表达式都隐式为 true,则 m & 1 的计算结果为 1。
以下是等效表达式:
if ((m & 1) == 1) // bitwise AND is 1
if ((m & 1) != 0) // bitwise AND is NOT 0
if (m & 1)
但是,如果测试更多位,则需要小心。例如 m = 1:
if (m & 3)
也是true
,但结果是1
.在这种情况下,if ((m & 3) == 3)
更好。
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- * 和 ** 在 C++ 函数声明中是什么意思?
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)
- 如何获得鼠标光标连接时按下左键单击和在C++中释放左键单击时?
- ^() {} 和 ^{} 在C++中是什么意思?
- 关于 ZeroMQ 和在非阻塞套接字上的轮询:.
- 使用委托调用构造函数和在另一个构造函数体中调用的区别
- 何时使用 .和 -> 在指针的情况下
- 过载操作员短路 && 和 ||在C++17
- 提高.测试 在 dll 中使用 BOOST 测试用例和在 exe 中的运行器中出现问题
- 创建、处理和在窗口QTCreator之间切换
- 可以动态分配和在C 的编译时分配的最大存储器
- 如何使用 .和 -> 在程序中引用类中的变量时
- 高速缓存行检索和在大型数据结构上的性能
- 在类中使用'const'和在C++中使用运算符重载是否有一个好的规则?
- 使用stdvector作为库中存储的缓冲区和在另一个库中使用此缓冲区的困难
- 类标头和在我的类.cpp文件中使用构造函数:"error: class 'Test' does not have any field named 'counter'"
- getline 和在类函数中传递输入流,主表达式错误
- 和在C++的含义