左移-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 实现执行任何操作。
在解决问题时,我一直在思考这个程序的输出如何给出 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 实现执行任何操作。