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

  • 本文关键字:计算 范围 错误 运算符 整数 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;

1 << count中,常量1是一个int而不是一个long long
然后班次溢出。
您应该使用1ll << count.

最新更新