通过左移,可以将数字设置为零

Siv*_*aSu 4 c c++ bit-manipulation bit-shift bitwise-operators

我对左移操作员有疑问

int i = 1;
i <<= (sizeof (int) *8);
cout << i;
Run Code Online (Sandbox Code Playgroud)

它打印1.

  1. 我已初始化为1.
  2. 在将位移动到整数大小的同时,它将LSB填充为0并且当1超过整数的限制时,我期望输出为0.

它是如何以及为何是1?

cni*_*tar 14

假设sizeof(int)您的平台上有4个.然后表达式变为:

i = i << 32;
Run Code Online (Sandbox Code Playgroud)

标准说:

6.5.7-3

如果右操作数的值为负或大于或等于提升的左操作数的宽度,则行为未定义.

  • 尝试避免不明确的行为!! (2认同)