• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:「左算術シフト」について)

左算術シフトについて

このQ&Aのポイント
  • 左算術シフトは、一番左側の数(符号)をそのまま(固定のまま)にし、二番目の左側の数(符号)を捨て、三番目以降の左側の数(符号)を左へスライドさせて、最後の数(符号)を右からゼロを補います。
  • 左算術シフトは、左にビットをシフトすることによって、数の値を2倍にする効果があります。
  • 左算術シフトは、データのビットを左にずらす演算です。ビットを左にずらすことで、数値の桁上げ(左シフト)が起こり、数の値が増加します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

 あってますよ。  要するに、算術シフトでは、符号ビット(一番左・最上位ビット)は変化させないというのが肝要です。

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

CPUに依ります。 PCで主流のx86、x64のCPUだと、算術左シフトは論理左シフトと同じ動作で、符号ビットを保存しません。右のビットで上書きします。 また、C言語の符号付き数に対しての左シフトも、符号ビットを保存しません。 ところが、情報処理技術者試験で使われるCASLIIという仮想的なCPUだと、算術左シフトは、質問にお書きの動作をするようになっています。 実際に物理的に存在するCPUでそういう動作をする物は知りません。 算術シフト命令は、右シフトしかないCPUもあります。 左シフトを行うと、あふれが無い限り、値が2倍になるというのは理解されていますでしょうか?符号ビットがどちらのケースでも、その右のビットが符号ビットと異なる場合は、数値のオーバーフローが発生して、値が2倍になりません。 普通の環境では、符号ビットを保存しない左シフトを行っている理由としては、その方が都合が良いからです。 例:符号付き8ビット数値で、-100 は、1001 1100 です。 符号保存で左シフトすると、1011 1000 で、10進数に直すと -72 です。 符号上書きで左シフト(論理シフトと同じ)すると、0011 1000 で、10進数に直すと 56 です。 つまり、どちらも -200 ではなく(-200は符号付き8ビット数値で表せないので)2倍になっていません。 符号上書きで左シフトすると、左に1があふれます。この1を繰り上がりとすして、符号付き9ビット数値 1 0011 1000 と考え、それを10進数に直すと -200 になり2倍になっています。符号保存で左シフトした 1011 1000 だとこういう繰り上がり処理が出来ません。

  • jack-a3
  • ベストアンサー率37% (302/797)
回答No.2

コンピュータの世界では数字を2ビット値で管理していて、最上位ビットは符号ビットです。 たとえば8ビットの場合二進数でいう00000001~01111111が10進数の1~127を表し、100000000~11111111が-127~-1を表してます。 その上で、算術ビットシフトというのは符号、つまりプラスかマイナスかの値は変えないままビットシフトしましょう、ということです。 なので二進数の01111111を左算術シフトするなら01111110になります。

関連するQ&A