繁体   English   中英

&在C ++中的含义

[英]meaning of & in C++

我对在某些C ++代码中找到的表达式感到困惑:

if (m & 1)
pmm=-pmm;

我不是一个C / C ++编码器,因此谷歌给了我两件事情:

  1. &是按位AND
  2. 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。

结果不为零,因此在我们的示例中将返回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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM