代码的输出是什么?

时间:2011-10-18 17:44:02

标签: c

#include<stdio.h>

int main()
{
    printf("%x",-2<<2);  //left shift of a negative integer
    return 0;
}

如果负整数用符号位表示,那么我担心符号位会丢失。 请解释一下。

2 个答案:

答案 0 :(得分:2)

行为充其量只是“实现定义”,可能是“未定义的行为”。

答案 1 :(得分:0)

负整数没有“符号位”。 -2存储为0xFFFFFFFE

此外,<<没有按照您的想法行事。在C中,它是一种算术(而不是逻辑)的转变。因此x << y基本上x * 2 ^ yx,其中^表示取幂。

最后,您应该从不对已签名的整数使用移位操作。它可能会在一定数量的情况下产生意外结果(负x是其中之一)并且不值得将它们全部排除。

如果您想将-2乘以4,那就去做吧......