- ベストアンサー
シフト演算で質問です
1バイトの 10010111を右に1シフトすると2^-1になるはずですが 151から75となり 2^-1になっていません。 なぜそうなるのでしょうか? これでは正確な演算を行うことができません。。。 よろしくお願いします! あと、論理シフトと算術シフトの使い分けもできれば教えていただきたいです!
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1バイト単位で考えるのであれば、10010111は右シフトすると、確かに2^-1(1/2)ですが、偶数ならば割り切れますが、奇数は割り切れません。その場合はキャリービットにLSB(最下位ビット)の値が入ります。 (1) 10010111:C=0 (151) (2) 01001011:C=1 1ビット右シフト (結果 75 余り 1) よって、ちゃんと計算出来ています。 論理シフト、算術シフトは以下のリンクを参照してください。
その他の回答 (1)
- ok-kaneto
- ベストアンサー率39% (1798/4531)
回答No.1
>10010111を右に1シフトすると2^-1になるはずですが なりませんよ。 これって、8ビットで、符号なしだよね?だとしたら扱える数字の範囲は0~255の"整数"だから、 2^(-1)・・・つまり1/2(0.5)はシフトしようがどうしようがそもそも扱えないけど。 問題文か教科書をもう一度よく確認してください。
質問者
お礼
ありがとうございました^^
お礼
ご丁寧にありがとうございました!! 頑張って合格します^^