Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@yukiyamamuro

二進数での剰余計算

More than 1 year has passed since last update.

メモリーやディスクには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社

0
Help us understand the problem. What is going on with this article?
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.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?