みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

シフト演算で質問です

1バイトの
10010111を右に1シフトすると2^-1になるはずですが

151から75となり
2^-1になっていません。
なぜそうなるのでしょうか?

これでは正確な演算を行うことができません。。。
よろしくお願いします!

あと、論理シフトと算術シフトの使い分けもできれば教えていただきたいです!

投稿日時 - 2013-03-06 19:18:37

QNo.7979720

すぐに回答ほしいです

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

 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

投稿日時 - 2013-03-06 19:52:35

お礼

ご丁寧にありがとうございました!!

頑張って合格します^^

投稿日時 - 2013-03-06 20:16:04

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

>10010111を右に1シフトすると2^-1になるはずですが

なりませんよ。


これって、8ビットで、符号なしだよね?だとしたら扱える数字の範囲は0~255の"整数"だから、
2^(-1)・・・つまり1/2(0.5)はシフトしようがどうしようがそもそも扱えないけど。

問題文か教科書をもう一度よく確認してください。

投稿日時 - 2013-03-06 19:32:49

お礼

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

投稿日時 - 2013-03-06 20:19:44

あなたにオススメの質問