Help us understand the problem. What is going on with this article?

二進数での剰余計算

メモリーやディスクには1Bit単位では記録できない1Byte(8Bit)が必要

シフト演算

コンピュータは剰余計算を行うためにシフト演算というものを行なっている。
シフト演算には左シフト(掛け算)と右シフト(割り算)がある

左シフト(掛け算)

桁を左に移動する(下の例では2桁)
桁から溢れた分はなくなり、新しくできた部分に部分に0を入れる

0 0 1 0 1 0 1 1
↑LOST ↑LOST ↓NEW ↓NEW
1 0 1 0 1 1 0 0

左シフト2だった場合は4倍になる(47→188になっているのがわかる)

例えば5倍にしたいなら[元の数値の左シフト2(4倍)]と[元の数値(1倍)]をたす

右シフト(割り算)

論理右シフトと算術右シフトで対応が異なる

論理シフト

シフト対象が正の数である場合行う

桁を右に移動する(下の例では2桁)
桁から溢れた分はなくなり、新しくできた部分に部分に0を入れる

0 0 1 0 1 0 0 0
↓NEW ↓NEW ↑LOST ↑LOST
0 0 0 0 1 0 1 0

(72→18)

算術シフト

シフト対象が負の数である場合行う

桁を右に移動する(下の例では2桁)
桁から溢れた分はなくなり、新しくできた部分に部分に1を入れる

1 1 1 1 0 1 0 0
↓NEW ↓NEW ↑LOST ↑LOST
1 1 1 1 1 1 0 1

(-12→-3)

マイナスの値の表現については補数で検索

参考

プログラムはなぜ動くのか(矢沢久雄)日経BP社

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした