c++ - c++中与位移相关的一行代码的解释

标签 c++ bit-shift

我不希望有人解释以下代码的工作原理(它检查 int 是否为泛数字),因为我应该自己做。我只需要帮助具体理解第 8 行。我不知道是什么 |正在做。

private bool isPandigital(long n) {
    int digits = 0;
    int count = 0;
    int tmp;

    while (n > 0) {
        tmp = digits;
        digits = digits | 1 << (int)((n % 10) - 1);
        if (tmp == digits) {
            return false;
        }

        count++;
        n /= 10;
    }
    return digits == (1 << count) - 1;
}

最佳答案

我知道其他人已经解释过它是按位或,但我想给出我自己的解释。

digits = digits | X会将 X 中的所有 1 位复制成数字。

digits = digits | 1 << Y将“设置”一位数字 - 它将设置第 Y 位。

因此,每个循环都会设置一个位。

关于c++ - c++中与位移相关的一行代码的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8767877/

相关文章:

c++ - 带有逻辑 OR 运算符的 if 条件的缩写?

c++ - 数组馈送函数消耗的内存

c++ - 左移的负数是否*总是*用 "1"而不是 "0"填充?

C++ - 移位返回负数

c - a >> ((sizeof a) * CHAR_BIT) 是定义的,UB 还是 IDB?

c++ - 将 uint8_t 的 vector 转换为位集

c++ - std::map::const_iterator 模板编译错误

c++ - 当字段可为空时,如何使用 C++ 接口(interface)在 Avro 中写入数据?

c - C 中意外的位移行为

c - 带符号类型的移位运算符