为什么这两个几乎相同的位移函数产生不同的答案?

时间:2016-04-06 13:47:26

标签: c++ bit bit-shift

使用unsigned表示第一个len位的掩码,我写了一个函数如下:

void left_shift(int len) {
  unsigned x = ~0u << (32 - len);
  printf("%08x\n", x);
}

然而,当我致电left_shift(0)时,控制台会打印ffffffff,而不是{预期的00000000

所以,我做了另一个函数来测试我是否误解了位移操作,如下所示:

void left_shift() {
  unsigned x = ~0u << (32 - 0);
  printf("%08x\n", x);
}

这一次,它打印出预期的00000000

总结:

int main() {
  left_shift();   // prints "00000000"
  left_shift(0);  // prints "ffffffff"
  return 0;
}

我真的很困惑。谁能帮忙解释一下?

0 个答案:

没有答案