この左シフト代入演算子への出力は -8 です。方法がわかりませんでした。助けてください!
#include < stdio.h>
int main()
{
int y = -1;
y <<= 3;
printf("%d", y);// prints -8;
return 0;
}
この左シフト代入演算子への出力は -8 です。方法がわかりませんでした。助けてください!
#include < stdio.h>
int main()
{
int y = -1;
y <<= 3;
printf("%d", y);// prints -8;
return 0;
}
32 ビットの 2 の補数の符号付き整数では、これらの数値の 16 進数と 2 進数の表現は次のとおりです。
-1 = 0xffffffff = 11111111 11111111 11111111 11111111
-8 = 0xfffffff8 = 11111111 11111111 11111111 11111000
その 2 番目は明らかに 3 ビットだけ左にシフトされた最初のものであり、3 つの余分な 1 が左側から「落ちて」おり、右側の 3 ビットはゼロで埋められています。
有効な質問。答えは、負の値に対して異なる動作をするシフト演算子にあります。特に左シフト割り当ての場合。
これらの 2 つのリンクをたどって、疑問を解消することができます。
と
お役に立てば幸いです。ありがとうございます。