我对左移运算符有疑问

int i = 1;
i <<= (sizeof (int) *8);
cout << i;

它打印 1。
  • i 已初始化为 1。
  • 在将位移动到整数大小时,它用 0 填充 LSB,当 1 越过整数限制时,我期望输出为 0。

  • 如何以及为什么它是 1?

    最佳答案

    假设 sizeof(int) 在您的平台上为 4。那么表达式就变成了:

    i = i << 32;
    

    标准说:

    关于c++ - 通过左移,可以将数字设置为零吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9429156/

    10-10 04:33