如果我左移一个带负值的正数,为什么会得到否定结果呢?

Mad*_*ddy -2 c binary bit-shift

你能否告诉我为什么下面的代码给出了一个否定的结果,因为无符号数的左移a有一个负值?

    int main(void)
     {
          unsigned int a=1;
          printf("%d",a<<-1);   

     }
Run Code Online (Sandbox Code Playgroud)

输出 -2147483648.

Som*_*ude 5

这篇文章:

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

所以你正在做的是未定义的行为.如果您想要可预测的行为,请不要移动负数位.