• ベストアンサー

シフト演算で質問です

1バイトの 10010111を右に1シフトすると2^-1になるはずですが 151から75となり 2^-1になっていません。 なぜそうなるのでしょうか? これでは正確な演算を行うことができません。。。 よろしくお願いします! あと、論理シフトと算術シフトの使い分けもできれば教えていただきたいです!

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

  • ベストアンサー
  • SPROCKETER
  • ベストアンサー率26% (2126/7992)
回答No.2

 1バイト単位で考えるのであれば、10010111は右シフトすると、確かに2^-1(1/2)ですが、偶数ならば割り切れますが、奇数は割り切れません。その場合はキャリービットにLSB(最下位ビット)の値が入ります。 (1) 10010111:C=0 (151) (2) 01001011:C=1 1ビット右シフト (結果 75 余り 1)  よって、ちゃんと計算出来ています。  論理シフト、算術シフトは以下のリンクを参照してください。

参考URL:
http://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97
bytebit8
質問者

お礼

ご丁寧にありがとうございました!! 頑張って合格します^^

その他の回答 (1)

  • ok-kaneto
  • ベストアンサー率39% (1798/4531)
回答No.1

>10010111を右に1シフトすると2^-1になるはずですが なりませんよ。 これって、8ビットで、符号なしだよね?だとしたら扱える数字の範囲は0~255の"整数"だから、 2^(-1)・・・つまり1/2(0.5)はシフトしようがどうしようがそもそも扱えないけど。 問題文か教科書をもう一度よく確認してください。

bytebit8
質問者

お礼

ありがとうございました^^

関連するQ&A