【问题标题】:What n&1 and n>>=1 mean? [duplicate]n&1 和 n>>=1 是什么意思? [复制]
【发布时间】:2020-08-07 17:07:52
【问题描述】:

我正在做这个练习:https://www.hackerrank.com/challenges/30-binary-numbers/problem,我在网上找到了这个“智能”代码,但我不明白 n&1 和 n>>=1 的条件在这里做什么。

 //C++ program to convert a decimal
// number to binary number

#include <iostream>
using namespace std;

int main()
{
    int n,count=0,max=0;
    cin >> n;

    while(n)
    {
        if (n&1)
            count++;
        else
            count = 0;
        if (max < count)
            max = count;
        n>>=1;
    }
    cout << max;

    return 0;
}

【问题讨论】:

标签: c++ c++11


【解决方案1】:
if (n&1)

通过按位与检查n 是否为奇数。

n>>=1;

n 的位右移一位。

【讨论】:

  • 详细信息:if (n&amp;1)n &lt; 0 时错误地测试了那些早已被遗忘的1s' complement 机器上的奇数。 2020 年不是真正的问题。
【解决方案2】:

&amp; 是一个按位与运算符,并以真或假计算表达式(当表达式是有条件的时),它与x % 2 非常相似,即这个条件:

if (n & 1) {
    //...
}

// is equal to

if (n % 2) {
    // ...
}

OTOH,n &gt;&gt;= 1 向右移动了一点 n

【讨论】:

  • "它类似于 x % 2 显然返回 1 或 0 作为余数" --> x%2 返回 0、1 或 -1。
  • The &amp; is a bitwise-AND operator and evaluates either true or false 这是高度误导,按位运算符不会评估为真或假。如果您有01111 &amp; 01001,它将评估为01001。如果&amp; 的结果在if 中使用,则此结果本身将被评估为布尔值。
  • @t.niese 已更新,谢谢。
猜你喜欢
  • 2012-01-03
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
相关资源
最近更新 更多