左移-1的位

shift left bit of -1

在解决问题时,我一直在思考这个程序的输出如何给出 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 的整数?

当我运行你的程序时,它输出“fffffffe”。但是,行为是未定义的。 C 标准规定,仅当被移位的值是非负数时(并且仅当移位不溢出时)才定义左移。因此,当您计算 -1 << 1 时,允许 C 实现执行任何操作。