#include<stdio.h>
int main()
{
printf("%x",-2<<2); //left shift of a negative integer
return 0;
}
如果负整数用符号位表示,那么我担心符号位会丢失。 请解释一下。
答案 0 :(得分:2)
行为充其量只是“实现定义”,可能是“未定义的行为”。
答案 1 :(得分:0)
负整数没有“符号位”。 -2
存储为0xFFFFFFFE
。
此外,<<
没有按照您的想法行事。在C中,它是一种算术(而不是逻辑)的转变。因此x << y
基本上x * 2 ^ y
为x
,其中^
表示取幂。
最后,您应该从不对已签名的整数使用移位操作。它可能会在一定数量的情况下产生意外结果(负x
是其中之一)并且不值得将它们全部排除。
如果您想将-2
乘以4
,那就去做吧......