-2

a負の値を持つ符号なし数値の左シフトにより、次のコードで負の結果が得られる理由を教えてください。

    int main(void)
     {
          unsigned int a=1;
          printf("%d",a<<-1);   

     }

出力 -2147483648。

4

2 に答える 2

5

この記事から:

右オペランドの値が負の値であるか、プロモートされた左オペランドの幅以上である場合、動作は未定義です。

したがって、あなたがしていることは未定義の動作です。予測可能な動作が必要な場合は、負の数のビットをシフトしないでください。

于 2013-05-07T07:18:11.480 に答える