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?

基礎理論:n進数の計算

Posted at

はじめに

基本情報技術者試験の学習中なので、学んだことをメモします
誤り等ございましたらご教示いただけますと幸いです🙇

n進数

n進数とは、1桁の数をn個の記号で数値を表現する方法のことです。

n進数の足し算

n進数の引き算

コンピューターは引き算ができない為、負の数の足し算を行う
負の数はnの補数で表現することができる

補数

2進数で2の補数を表現


⚠️2の補数は再度ビット反転して1足せば元々の数値になる

2進数2の補数を利用して引き算

符号ビット

-(マイナス)を表現する場合に、符号ビットを利用することがあります。
先頭ビットを符号ビットとして代用します。
見た目では符号ビットを利用しているかわからないため、
利用している場合は、「符号ビットを利用している旨の」前置きが必ずあります。

1:負の数
0:正の数

シフト演算

2進数を表すビット列を左右にずらすこと

10進数の場合

615 左にずらす(*10)← 61.5 →右にずらす(*1/10) 6.15

桁がズレると10倍となる(基数)

2進数の場合

10進数と同様、左にn個ズレると元の数値の2ⁿ倍になる
       右にn個ズレると下の数値の2⁻ⁿ倍になる

桁をズラすシフト演算は、論理シフト算術シフトがある

論理シフト(左シフト:かけ算)

符号を考慮せずに単純に桁をずらすことを論理シフトという
論理シフトのやり方は、nビット左シフトし、溢れた数値は無視、空いたスペースに0を格納します

例)8ビット2進数の数値を左に2ビット論理シフトする

JPEG画像-4B69-85CC-96-0.jpeg

8ビットで表せる範囲の数値は計算できない!

例)8ビット2進数の数値を左に3ビット論理シフトする
JPEG画像-46F2-A846-3E-0.jpeg

272になるはずが、16になってしまいました。。
これは、8ビットで表せる0~255を超えてしまっているからです!
こういった現象をオーバーフローと言います

論理シフト(右シフト:割り算)

例)8ビット2進数の数値を右に2ビット論理シフトする

JPEG画像-4D33-90DA-37-0.jpeg

算術シフト(左シフト:かけ算)

JPEG画像-48D0-AEBB-77-0.jpeg

算術シフトでは、符号付き8ビット2進数で表せる-128~127を超えると
論理シフト同様オーバーフローを起こします

JPEG画像-470D-BF4E-04-0.jpeg

算術シフト(右シフト:割り算)

JPEG画像-4BF1-B5AF-1F-0.jpeg

論理シフト・算術シフトまとめ

論理シフト(符号を考慮しない) 算術シフト(符号を考慮する)
左シフト(かけ算) ・空いたスペースに0を入れる
・1がはみ出るとオーバーフロー
・空いたスペースに0を入れる
・符号ビットと異なる数字がはみ出るとオーバーフロー
右シフト (割り算) ・空いたスペースに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?