a
負の値を持つ符号なし数値の左シフトにより、次のコードで負の結果が得られる理由を教えてください。
int main(void)
{
unsigned int a=1;
printf("%d",a<<-1);
}
出力 -2147483648。
この記事から:
右オペランドの値が負の値であるか、プロモートされた左オペランドの幅以上である場合、動作は未定義です。
したがって、あなたがしていることは未定義の動作です。予測可能な動作が必要な場合は、負の数のビットをシフトしないでください。