重複の可能性:
C での負の数の右シフト
この質問は で見つけましたSO
が、どこでも結果が未定義であることがわかりました。
int main()
{
printf("%d\n",32<<-2); <-------------1
printf("%d\n",32>>-2); <-------------2
return 0;
}
私は出力を次のように取得しています: http://ideone.com/fIaXo
8
128
番号が付けられたステートメントでは1
、32 が右に 2 回シフトされ、2 番目のステートメントでは 32 が左に 2 回シフトされているようです。
値が だけ左にシフトされる-p
と、コンパイラはそれをp
右にシフトしたものとして扱うというのは本当ですか?
ここで正しい出力が得られるのはなぜですか?