向左移位-1

时间:2018-02-07 06:22:48

标签: c compilation bit-manipulation bitwise-operators

在解决问题时,我一直在思考这个程序的输出如何给出ffffffff。由于位的左移应该给-2。我在这里交叉检查Online Calculator给-2。我可以看到-1的二进制值是11111111.但是怎么样? 另外,我在这里遵守Signed int conversion

  

-1 ---> 0xff - > 1111 1111

     

-2 ---> 0xfe - > 1111 1110

     

-3 ---> 0xfd - > 1111 1101

     

-8 ---> 0xf8 - > 1111 1000

#include<stdio.h>
int main()
{
   printf("%x", -1<<1);
   getchar();
   return 0;
}  

请告诉我,当使用按位移位运算符时,编译器如何在0以下看整数?

1 个答案:

答案 0 :(得分:1)

当我运行你的程序时,它会输出“fffffffe”。但是,行为未定义。 C标准表示只有当被移位的值是非负的时才定义左移(然后仅当移位没有溢出时)。因此,当您评估-1 << 1时,C实现可以执行任何操作。