以下の行をいくつかの良い例とともに説明していただけますか。
nによる左算術シフトは、2 nを乗算することと同じです (値がオーバーフローしない場合)。
と:
2の補数のnによる右算術シフトは、2 nで除算し、負の無限大に向かって丸めることと同じです。2進数が1の補数として扱われる場合、同じ右シフト演算により2 nで除算され 、ゼロに向かって丸められます。
以下の行をいくつかの良い例とともに説明していただけますか。
nによる左算術シフトは、2 nを乗算することと同じです (値がオーバーフローしない場合)。
と:
2の補数のnによる右算術シフトは、2 nで除算し、負の無限大に向かって丸めることと同じです。2進数が1の補数として扱われる場合、同じ右シフト演算により2 nで除算され 、ゼロに向かって丸められます。
私たちがよく知っているベースで何が起こるかを説明します:10。
基数10で、数値N=123があるとします。ここで、この数値を左のk = 3の位置に「シフト」し、空の数字を0で埋めます。したがって、X=123000になります。
X = N *10kであることに注意してください。
2進数の場合も同様です。
Example 1 (base 10) | Example 2 (base 2)
|
N = 123 | N = 110101 (53 in base 10)
k = 3 | k = 2 (in base 10)
N << k = 123000 | N << k = 11010100 (212 in base 10)
|
10^k = 1000 | 2^k = 100 (in base 2; 4 in base 10)
N * 10^k = 123000 | N * 2^k = 11010100 (53 * 4 = 212 in base 10)
|
右シフトの場合は、プロセスの単なるミラーであり、基数10でも類似しています。たとえば、基数10に123456があり、右3桁を「シフト」すると、123になります。これは123456/1000です。 (整数除算)、ここで1000 = 103。
独自の例を作成するのは簡単です。
101
バイナリである5つを考えてみましょう。一度左にシフトすると1010
、10のバイナリが得られます。もう一度やり直すと、10100
20個などが表示されます。