基本情報技術者試験の資格試験のための勉強をしているものです。
現在、カテゴリー的には基礎理論の離散数学、
シフト演算のうち、「論理シフト」ではなく、
「算術シフト」で理解できない点があります。
左シフトは理解できたつもりなんですが・・・
右シフトがいまいちよくわかりません。
以下に例題を表記します。
【10001100を2ビット左シフト】
先頭ビットは符号ビットということで、マイナスの数値になるのだと思います。すると、
【元の数】
10001100
=-(0001100)
=-(8+4)
=-12
【2桁左シフト結果=元の数×2^2】
10110000
=-(0110000)
=-(32+16)
=-48
となり、
元の数=-12
結果 =-48
で、結果が元の数×2^2で結果が合っているようです。
(と思っているだけなんですが)
元の数の考え方自体に間違いがありそうですが・・・
とりあえず進みます。
同様に
【10001100を2ビット右シフト】すると
【2桁右シフト結果=元の数×2^-2(=元の数×1/4)】
11100011
=-(1100011)
=-(64+32+8+4)
=-99
となり、
元の数=-12
結果 =-99
で、結果が元の数×2^-2(=元の数×1/4)と結果が合いません。
先頭符号を空いたビットに移動した部分は数えないのでしょうか。
すると、
元の値 =-12
結果 =-3
で結果が合う気がします。
過去の回答や検索サイトなどで調べてみましたがピンときません。
テキストにも、10進数での数値表記はなく、
答え合わせができなくて困っております。
どなたかお答えいただけると助かります。
どこが間違っているのか混乱しております。
先頭ビットが正負の符号ビットという前提の例題なのですが、
マイナス符号がついている前提となるので
先頭ビットや空いたビットに入れた符号ビットも含めて
「2の補数」で考える必要があるのかどうかも
よくわからなくなってきました。
つまり、元の数値「10001100」は「-12」ではなく
-(01110100)
=-(64+32+16+4)
=-116
なのでしょうか
なお、C言語は今のところ学習していないので、
C言語にまつわるご回答ですともっとわからなくなりそうです。
単純に間違いを指摘していただけると大変助かります。
よろしくお願いします。
No.2ベストアンサー
- 回答日時:
#1です。
おっしゃる通り、右シフトの時に符号ビットをそのままシフトするのは、
補数を使っているからです。
補数の場合は、ビットが反転している為、マイナスを表すときは、1が0になります。
理屈で言えば、右シフト(2分の1、4分の1、...)するのに桁の大きいところには
0が入るはずですので、符号ビットが1の時(負の時)には1を入れます。
ただ、今回の補足の例で左シフトの計算が合わないのは、桁数が足りないからです。
8桁の2の補数で表すことのできる範囲は-128~127です。
今回の場合、元の数が-116ですので、左に2ビットシフト(4倍)すると、
-464ですので2ビット足りません。
それで、本来立っていたビット(2桁目と3桁目)があふれてしまった為に
計算が合わなくなりました。
ためしに、10桁(1110001100)で同様の計算をすればうまくいくはずです。
seiiiichiさん、ありがとうございました!
大変参考になり、理由がわかりました。
そして、左シフトも桁を足して補数での計算してみて、
答えも合いました!
いやあ、うれしいです。
「あふれ」、学んだはずなんですが。
慣れるために何度も復習したいと思います。
ありがとうございました。
頑張ります。
No.1
- 回答日時:
確かに、これだけだと、2の補数表現なのか、ただ単に第一ビットが
符号をあらわしているだけなのかよくわかりませんが、とりあえず
後者として話しを進めます。
論理シフトは符号ビットもシフトしますが、
算術シフトは符号ビットはシフトしませんし、シフトされません。
したがって、
【10001100を2ビット右シフト】
→ 10000011 (-3)
となり、計算は合います。
なので、質問者様の間違いは「符号ビットもシフトしてしまったこと」です。
この回答への補足
さっそくのご回答、本当にありがとうございます。
ご回答いただいた方法ですと、スッキリします。
ありがとうございました!
今は単純にそのように理解していこうと思います。
ちなみになんですが、テキスト上では
「シフト演算」の「算術シフト」の「右シフト」は
空いたビットには「符号ビットと同じものを入れる。」
と書かれております。
今回の例では間違いのもととなったところですが、
10001100を算術シフトすると
2桁右シフトすると11100011となり(空いた所に符号ビットを入れる)
2桁左シフトすると10110000となる(空いた所に0を入れる)
とテキスト上はなっております。
左シフトと右シフトで、元の数値も結果の数値もどちらも
2の補数表現としてとらえて自分で検算的に
計算すると、今度は右シフトは答えが合うのですが、
左シフトで答えが合いません。
ご回答者様の方法でせっかく答えが合うのに、
「右シフトのときは符号ビットで埋める」という概念自体が
存在する意味がないような気がするのですが。
もしかして、
負の数の左シフトのときは「2の補数」の概念を使わず
先頭ビットは符号ビットとして考えて、後のビットをまんま計算する。
負の数の右シフトのときは全ビットを数値と考えて負の数と捉え
「2の補数」の概念で計算する。
という考え方もできるのでしょうか?
なにか考え方で欠けていそうなところなど
もしお分かりでしたら教えてください。
たしかにテキストには「2の補数」表現なのか
符号を表しているだけなのかは書かれておらず、
左シフトと右シフトも続けて書かれていますが
どちらがどちらの表現なのかなどは書かれていないので
何とも言えません^^
テキスト的には、大まかな概念を説明しただけで
それ以上は突っ込むなというところなのかもしれませんが
もやもやが晴れたらうれしいです。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 情報処理技術者・Microsoft認定資格 2進数の問題を教えてください。 1 2022/07/27 09:42
- 数学 以下の問題が分かりません。 8ビット浮動小数点数が、最上位ビットから順に符号1ビット、指数部3ビット 4 2023/07/22 16:06
- 計算機科学 ビット計算 2 2023/04/16 14:26
- 情報処理技術者・Microsoft認定資格 情報技術の問題についてです。 10進数の−36を以下のような16ビットの浮動小数点表示にするといくつ 3 2022/05/21 19:53
- 計算機科学 2進数の計算について 2進数の値は全て8ビットで負数は2の補数形式とする。結果が8ビットで表現出来な 3 2023/07/22 14:08
- 工学 疑似乱数生成器 3 2023/01/05 02:06
- その他(データベース) 4進数風なバーコードは何ですか? 2 2022/11/28 23:33
- C言語・C++・C# C++言語の16進数の表現についておしえてください 1 2022/11/14 17:46
- 高校受験 中3 9月 模試の結果D判定 夏に受けた模試の結果が第1志望D判定でした。 あと21点でやっと合格圏 3 2022/09/09 23:19
- 数学 実数であるべきものに虚数を含む複素数が現れたときの対処法 4 2022/08/30 09:19
関連するカテゴリからQ&Aを探す
医師・看護師・助産師
薬剤師・登録販売者・MR
医療事務・調剤薬局事務
歯科衛生士・歯科助手
臨床検査技師・臨床工学技士
理学療法士・作業療法士・言語聴覚士
臨床心理士・心理カウンセラー・ソーシャルワーカー
介護福祉士・ケアマネージャー・社会福祉士
弁護士・行政書士・司法書士・社会保険労務士
フィナンシャルプランナー(FP)
中小企業診断士
公認会計士・税理士
簿記検定・漢字検定・秘書検定
情報処理技術者・Microsoft認定資格
TOEFL・TOEIC・英語検定
建築士
インテリアコーディネーター
宅地建物取引主任者(宅建)
不動産鑑定士・土地家屋調査士
マンション管理士
電気工事士
美容師・理容師
調理師・管理栄養士・パティシエ
シェフ
保育士・幼稚園教諭
教師・教員
国家公務員・地方公務員
警察官・消防士
その他(職業・資格)
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
実績を積むという表現
-
「最大300字程度」
-
【機械図面】 最大値・最小値...
-
言葉遣いについて ○○を取りに行...
-
「充足に達しましたので」これ...
-
敬語の使い方
-
ビジネスメールについて
-
16進数の表し方について
-
ビットについて基本情報技術者...
-
基本情報技術者試験 論理演算...
-
高窓(ハイサイド窓)を平面図...
-
味の表現で「どっきりする」っ...
-
16進数のAND演算
-
算術シフトについて
-
「今回,イエローカードな!」と...
-
10分の1は「10/1 それとも1/10...
-
1億x1億はいくらでしょうか?
-
50以下は“50”も入るのですか?
-
5進法を10進法への直し方
-
16進小数0.Cを10進数小数に変換...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
実績を積むという表現
-
【機械図面】 最大値・最小値...
-
「最大300字程度」
-
「充足に達しましたので」これ...
-
言葉遣いについて ○○を取りに行...
-
敬語の使い方
-
高窓(ハイサイド窓)を平面図...
-
ビジネスメールについて
-
16進数の表し方について
-
1の補数の2進数での減算(基本...
-
いつ電話をよこすの?という表...
-
桁あふれがわかりません
-
問:負数を2の補数で表現する...
-
ハンマードリルで木杭の打ち込み
-
どなたか教えいただけませんか?
-
変電所のことをS/Sと表現するそ...
-
来年の恵方巻きの恵方の方角って
-
シフト演算について
-
味の表現で「どっきりする」っ...
-
「今回,イエローカードな!」と...
おすすめ情報