我不希望有人解释以下代码的工作原理(它检查 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/