同じシフト数の2つの異なる結果を見たので、私はこのすべてのシフトのことで混乱しました。私はこのことについてたくさんの質問があることを知っていますが、私はまだ私が探していたものを見つけることができなかったようです(質問やウェブサイトを助けることができるリンクを投稿してください)。{2の補数}ビットシフト
最初に、数字13
のようなバイナリが表示されています:001101
(ビットの全ワードではありません)。 2
によって左にシフトすると、最後のビット(おそらく符号のビット)が保持され、結果は0|10100 = 20
のようになります。しかし、他の場所では、番号13
は01101
のようになり、現在01101<<2
は0|0100 = 4
でした。私は左にシフトすることはベースで乗算することと同じですが、これは私を混乱させました。 13
を001101
または01101
とし、シフトを適用する必要があります。 結果を考慮してオーバーフローを省略したと思います。
ありがとうございました!
はい、私はあなたが言っていることを理解しています。しかし、新しいタイプを定義しない限り、 '13 - 001101'(6ビット)をシフトして' << 3'でシフトしたいとすると、結果は '001000'または' 101000' –
@MathNewbie '101000'になります。 – harold
このようなシフトには、プロパティ '(a + b)<< k ==()を持たないでしょう。 a << k)+(b << k)例えば – harold