为什么按位运算符使用整数提供的相同位数计算最大可能范围时会产生错误

1 c++

为什么这个代码不给预期值的n = 1000000000000预期value = 1099511627775 虽然代码是给255

long long now = n, count = 0, len = 0;
while (now >= 1) {
  count++;
  now /= 2;
}
len = (1 << count) - 1;
cout << len;
Run Code Online (Sandbox Code Playgroud)

pro*_*-fh 7

1 << count常量1int不是long long
然后,移位溢出。
您应该使用1ll << count