在解决问题时,我一直在思考这个程序的输出如何给出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以下看整数?
答案 0 :(得分:1)
当我运行你的程序时,它会输出“fffffffe”。但是,行为未定义。 C标准表示只有当被移位的值是非负的时才定义左移(然后仅当移位没有溢出时)。因此,当您评估-1 << 1
时,C实现可以执行任何操作。