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

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

解決済みの質問

シフト演算子について・・・意味がわかりません(T_T)

左シフト演算子<<は最上位ビットの上位を削除して最下位に0を追加、
右シフト演算子>>は最下位ビットが削除されて、最上位ビットに最上位ビットと同じ値が補充される、
論理右シフト>>>は最下位ビット削除され、最上位に0が補充される。

と、ここまではわかりました・・・

ある問題で

int n = -1>> 31;

でnはいくつになるか?というのがあったんですが、
解説の意味がわかりません。
回答はー1です。
「>>演算子によるシフトでは符号ビットが拡張される」
意味がわかりません・・・(@_@)
「>>>演算子であったなら、符号ビットがゼロになるのでN=1となる」
え・・・???!!!
ふごーびっと???

シフト演算子ですから、
「-1の31こ右にビットをシフトする」
んだな・・・と思ったところ、
まったくどう考えてよいのかわからず、
回答を見たところ、余計わからなくなりました。

だれかたすけてください(T_T)

投稿日時 - 2003-10-02 21:12:16

QNo.669851

困ってます

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

右シフトの動作はこちらの通りです。
http://www.microsoft.com/japan/msdn/library/ja/jscript7/html/jsoprrshift.asp

右に1ビットシフトしたとき、全体のビットが右に1ビットシフトし、
最上位ビットには符号ビットが入ります。
-1は、全ビットが1で、符号ビット(MSB=最上位ビット)も1ですから、
何ビット右シフトしても常に-1です。

参考URL:http://www.microsoft.com/japan/msdn/library/ja/jscript7/html/jsoprrshift.asp

投稿日時 - 2003-10-02 23:18:05

お礼

見逃していました!

右シフトの場合、
最上位にはシフト前の最上位ビットと同じ値が補充される、

とありました。

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

投稿日時 - 2003-10-03 00:59:30

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

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

回答(3)

ANo.3

MovingWalk様のお答えで正しいかと思います。
僕はJAVA経験がないのですが、この手の問題はC言語入門、アセンブリ言語入門でよく問われる問題です。
C言語入門的な書籍のシフト演算子の所を読めば分かりますよ!。

-1は内部的にはFFFFFFFF(h)で表現されている事(2の補数)と算術シフト(符号付)と論理シフト(符号無し)の違いに注意です。
(補足)2の補数の求め方:各桁を反転して最下位ビットに1を加えたもの。

投稿日時 - 2003-10-02 23:50:31

お礼

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

やっとわかりました。

右シフトの場合と、左シフトの場合の違い、
1111 1111 1111 1111 1111 1111 1111 1111
がマイナス1になる、

ということがうまくわかっていませんでした。

投稿日時 - 2003-10-03 01:01:22

ANo.1

まず「2の補数」を理解する必要がありますね。
検索サイトで検索すれば見つかると思います。
後はすぐ理解できると思いますよ。

投稿日時 - 2003-10-02 21:15:58

補足

2の補数、ちょっと調べてみました。

8ビットで表現できる数は255。
しかし、これだとマイナスを表現できないから、
頭の一ビットを符号用とした。
よって数字部分は後の7ビットを使うから、
表現できる数は、-127~127。

理解が間違っている点はありますか?

問題の場合は31個シフトとありますが、
32ビット数字だと考えろ、ということですか?
1000000000000000000000000000001
(0が30個)
頭の1は符号ビットだから無視されるとして、
1000000000000000000000000000000
となってー0?(マイナス0???)

うーーん。よくわかりません

投稿日時 - 2003-10-02 22:16:51

お礼

もう少し考えました。

-1は
1111 1111 1111 1111 1111 1111 1111 1111
でしたね。
31ビット右シフトで・・・
やはり
1000 0000 0000 0000 0000 0000 0000 0000
-0(マイナス0)?????????

投稿日時 - 2003-10-02 22:44:08

あなたにオススメの質問