0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

シフト演算の演習

Posted at

32ビットのレジスタに16進数ABCDが入っている時、2ビットだけ右に論理シフトした値はどれか?

レジスタ

出典 http://www.infonet.co.jp/ueyama/ip/glossary/register.html

  • レジスタは、データを一時的に記憶する一種のメモリで、 記憶容量は 8 ビット、16 ビット、32 ビット …等です。
  • シフトレジスタは、記憶しているデータの桁を左右にシフトさせることができるレジスタです。
  • シフトレジスタの用途は他にもいろいろありますが、 シフトの度に 1 ビット ずつ順にデータを取り出すことができますから、 8 回シフトさせると 8 ビット、 すなわち1 バイトのデータをシリアルに変換することができます。
    これなら 8 ビットの情報でも 1 本の通信回線に乗せることができます。 インターネットでもこのように、 データをシリアルに変換して通信しています。

出典 http://www.infonet.co.jp/ueyama/ip/glossary/shiftregister.html

気づき

コンピュータの部品のことか。
プロセッサの中にたくさんあるのか。
シリアルって何?しかしこれは後から調べよう。
問題文はシフトレジスタのことを言っているのか。

ABCDを2進数に変換、論理シフトで左から00を加えた。その結果
00101010111110011になるのでこれを16進数に変換
2AF3となる。
成功。やった。

数値を2進数で格納するレジスタがある。このレジスタに正の整数xを設定した後、”レジスタの値を2ビット左にシフトして、xを加える"操作を行うと、レジスタの値はxの何倍になるか。ここで、溢れ(オーバーフロー)は、発生しないものとする。

気づき

2ビット左にシフトすることは4倍することだから答えは4倍だ。
答えは5倍だった。
奇数なのか。どうしてだろう。説明を読んでみよう。

正の整数を前提としているので今回のシフトは論理シフトらしい。
これの意味がわからない。これ以上説明を読んでもわからないと思ったが他のサイトの解説を読んで理解した。
やっぱり自分の読解力不足だった。

この問題の意味がわからなかった。 レジスタに2進数ので表した整数xを左に2桁シフト、その後整数xを再び加えたため4倍+1倍で5倍になる。

気づき

しかし正の整数を前提としているので今回のシフトは論理シフトが意味がわからない。
多分
登場する整数に負の数がないため符号に考慮しなくてもいいから論理シフトなのかもしれない。

非負の2進数b1b2...bnを3倍にしたものはどれか。

非負とは
非負の整数ってなんですか??マイナスではない整数、つまり正の整数のことですか?(´・ω・`)
当たってますでしょうか!?(>_<)
0と正の整数という意味でしょう。0を含むかどうかに、ポイントがある。

出典 https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1160919306

気づき 

2進数には0と1があるから非負の数なのだろう。

気づき

3倍とはどのような意味なのかを知らなければならない。
2倍+1倍になることを意識する。
2倍は左にシフトするとできる。だから最後の桁に0をつける。
1倍はその数を足すとできる。
つまり
最後の桁が0であり、元の数が足されているのものが該当する。
なので

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?