![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
16進数ので各4ビット(4桁)で2進数で算術シフトしますが、符号部はぬいて元の16進数に戻すのですか?でもそうすると元の数より大幅に減ってしまいますよね。例題の
例題・A4A6(16)を2ビット算術シフトする。
A4A6(16)=1010 0010 1010 0110 (2)
・左へ2ビットシフトする。
1000 1010 1001 1000(2)=A98(16)
・右へ2ビットシフトする。
1110 1000 1010 1001(2)=8A9(16)
というように、符号部ぬかしたら増えるはずが減ったり、減るはずが増えたりと。なんか変ですよね。
ちなみに符号部すべて入れて考えたら、
左へ算術シフト 8A98(16)
右へ算術シフト E8A9(16)
増えるはずが減って、減るはずが増えるというあべこべになってしまいます。
超基本的ことなんですが、なぜか本に記載されていなかったので書きました。ご協力ください。
No.3ベストアンサー
- 回答日時:
まず「A4A6(16)=1010 0010 1010 0110 (2)」の2進数が違います。
正しくは、A) 「1010 0100 1010 0110(2)」です。
で、左へ2ビットシフトすると
B) 「1001 0010 1001 1000(2)」=9298(16)
右へ2ビットシフトすると
C) 「1110 0100 1010 0110(2)」=E4A6(16)
で、簡単に言ってしまえば・・・
符号部が1なので「マイナス値」を表しているので
16進数では、左で少なくなり、右で大きくなっているのでしょう。
負数なので反転させて1加算したものに"-"を付加。
A) 0101 1011 0101 1001+1=0101 1011 0101 1010(16)
B) 0110 1101 0110 0111+1=0110 1101 0110 1000(16)
C) 0001 1011 0101 1001+1=0001 1011 0101 1010(16)
これらを10進数で表すと
5B5A = 10480 + 3072 + 80 + 6 -13638
6D68 = 24576 + 3328 + 96 + 8 -28008
1B5A = 4096 + 2816 + 80 + 10 -7002
こんな感じではないかな。
まずは、どーーーーーしても直さなくてはならないもの。それはうっかりミス。サザエさんじゃあるまいし、これだけは直さなければ。だから理屈は合っているのですが、ほんのピコ単位みたいに小さなミスで×。_| ̄|○
という人間なんです。だから、質問にだした2進数で入力し間違えていて、手元の計算した紙見て「しまった~~っ」と思いました。すみません_| ̄|○
さて、そうすれば補数表現で絶対値から1の補数に変換するとき負数は反転させて、さらに2の補数に変換するとき1加算するのでしたよね。そうならば理屈が通ります。
なにか、補数表現とシフト演算のつながりまでわかって得した気持ちです。次に大事なことそれは…サザエさんミス(うっかりミス)しないことです。
どうも超わかりやすい、そして得する解説ありがとうございました。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_04.png?5a7ff87)
No.2
- 回答日時:
ひとつには、「増えた」「減った」という定義がどうも、不明瞭であるということ、また、今回の「例」では、最初の左シフトの時点で「オーバーフロー」が発生しているので、その前後での挙動には連続性がないということです。
まず、「算術シフト」とは、2進数を符号付き数値と見た場合の操作ですから、0000(16) > FFFF(16) です。(前者は、0, 後者は -1)
さらに、オーバーフローの問題です。
左シフトでオーバーフローが発生した場合、そのビットの情報は失われます。
この場合、シフトした2ビット分の情報がなくなります。
このために、反対方向にシフトしても、もとの情報は得られません。
こういうことなのでしょうか?
あと、算術シフトに関連して、「符号部」という考え方はありません。単に、「符号ビット」です。
また、16進表記の点では、符号ビットを考慮しようがしまいが、
1110 1000 1010 1001(2)=E8A9(16) です。
これが、59561(10) なのか、-5975(10)が符号を考慮するかどうかの問題になります。
浮動小数点の符号部が頭に上がってしまい、符号ビットを符号部と勘違いしていました。
符号を考慮するとかしないとかはまだ、指示がでていないのでそれはたぶんこれから詳しく習うと思います。
わかりやすい解説ありがとうございました。
No.1
- 回答日時:
左へnビットシフトする場合、元の数の2×n倍したことと同じになりま
す。よってこれにより表わせる整数の範囲を超えてしまうことがあります。
そのため、思ったとおりの値が出てこないのだと思います。
右へnビットシフトする場合、元の数の1/(2×n)倍したことと同じにな
ります。この場合算術シフトなので、16進にすると見かけ上増えてるように見えますが、実際は減っています。
例えば 1110 0000(2)=E0(16)=-32を右に1ビット算術シフトすると、
1111 0000(2)=F0(16)=-16 となり減っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 情報処理技術者・Microsoft認定資格 2進数の問題を教えてください。 1 2022/07/27 09:42
- その他(法律) アルバイトシフト・法律について 一ヶ月ごとのシフト制で希望シフトを提出し、そのシフトが組まれ公表され 1 2023/01/25 18:45
- アルバイト・パート アルバイトシフトについて 一ヶ月ごとのシフト制で希望シフトを提出し、そのシフトが組まれ公表されました 1 2023/01/25 18:32
- Excel(エクセル) 月間シフト表から総勤務時間を計算する関数 4 2023/05/20 07:12
- アルバイト・パート パートのシフトについて。 新人さんがドドっと増えたので、今度のシフト減らされています。連続4日休みで 4 2023/06/08 19:37
- 数学 ごめんなさい l=⎡-log2P(ai)⎤ と 1 2022/12/05 12:25
- 会社・職場 バイト先に苦手な人がいて、シフトを減らしているんですが、シフトが少ないと言われた場合に使える言い訳と 6 2023/03/28 12:18
- 労働相談 賞与カットの違法 3 2022/06/30 06:41
- アルバイト・パート パート勤務のシフトについてお聞きします。 3 2023/02/18 11:11
- アルバイト・パート バイトで全然シフトに入れてもらえません 3 2022/11/09 22:23
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どの文章が自然でしょうか? シ...
-
シフトがLINEで出す系のバイト...
-
バイトのシフトが急激に減りま...
-
パートのシフトが週1しか入りま...
-
店長にLINEを既読無視されました
-
スシローのバイト
-
バイトのシフト 確認方法
-
Accessのクエリで2つのフィー...
-
今日バイトを辞める事を電話で...
-
問題の意味がわかりません
-
バイトのことで悩んでいます
-
セブンイレブンのバイトを辞め...
-
バイト先から連絡が無い
-
エクセルでセルを挿入するとき...
-
アルバイトのシフトについて
-
私のシフトの要求はわがままで...
-
掛け持ちのバイトを辞めたい
-
シフトレジスタを一般人でも理...
-
今日の昼頃バイトの面接に合格...
-
遅刻・早退時間の関数
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どの文章が自然でしょうか? シ...
-
シフトがLINEで出す系のバイト...
-
パートのシフトが週1しか入りま...
-
店長にLINEを既読無視されました
-
バイトのシフトが急激に減りま...
-
エクセルでシフトをランダムで...
-
コンビニの夜勤で、当日体調不...
-
バイトのシフト 確認方法
-
ドンキでオリエンテーションを...
-
今日バイトを辞める事を電話で...
-
バイト先都合のシフト変更について
-
スシローのバイト
-
赤外線吸収スペクトル
-
私は4月から大学生です。バイト...
-
シフト表から名前が消えてたら...
-
無銭乞食?のお客様にたいして...
-
バイトを辞めたいです。 3ヶ月...
-
私のシフトの要求はわがままで...
-
シフト表に名前ない...
-
遅刻・早退時間の関数
おすすめ情報