はじめに
皆さん日々の学習お疲れ様です。
今回は前回の基数変換より少し取り組みやすい
補数と固定小数点について書かせていただきました。
記事作成の目的は私のアウトプットなのですが、
もしよろしければ覗いていってください。
補数
コンピューター内部では「0」と「1」しか扱えません。そして引き算ができません。
負数を表現する一つの方法として今回学ぶ補数を使用します。
補数
「ある数」を「決められた数」にするために、「補う数」
だそうです。
私も意味については深く理解しておりませんが使い方を理解すればきっと大丈夫!
一般的に、N進数では「N-1の補数」と「Nの補数」の2通りがあります。
①「ある数」に「N-1の補数」を補うと、与えられた桁数の最大値になる
②「ある数」に「Nの補数」を補うと、与えられた桁数の、次のけたに桁上がりをする
ということらしいです。
文字だけ見てもわからないと思うので例を交えて紹介できればと思います。
例 10進数には「9の補数」と「10の補数」の2つがあります。
10進数3桁で表現する場合
123の「9の補数」は876、「10の補数」は877になります。
(9の補数)
123
+ 876 ←9の補数を補うと
999 ←10進数3桁の最大値になる
(10の補数)
123
+ 877 ←10の補数を補うと
1000 ←次の桁に桁上がりする
ここで10進数は3桁であるため桁上がりした1は捨ててしまいます。
ということは123+877=000になります。
つまり10の補数877は123の対の負数(-123)の意味になります。
なるそうです。。。
2の補数
個人的には過去問題を解いていると2の補数がよく出てくると感じましたので
大きく見出しを付けました
先ほどと同じく2進数には「1の補数」と「2の補数」があります。
例 2進数4ビットで表現する場合
0101の「1の補数」は1010
「2の補数」は1011 です。
(1の補数)
0101
+ 1010 ←1の補数を補うと
1111 ←2進数4ビットの最大値になる
(2の補数)
0101
+ 1011 ←2の補数を補うと
10000 ←次のビットに桁上がりする
ここで!
2進数4ビットであるため桁上がりした1は捨てます!さよなら!
ということは
0101+1011=0000
2の補数1011は0101の対の負数の意味になっています。
コンピューター内部では2の補数を使って負数を表現しています。
現状なんとなくそんなものなんだなと考えています
2の補数の特徴
コンピューターには「マイナス」の記号がないため先頭ビットを
符号ビットとして代用します。
次に2の補数の作り方についてです
つまり頭に1があったら負数!みたいにザックリ私は覚えてます。
先頭ビットが負数になるかどうかは問題文に明記されていますので
しっかりと問題文を読むことも大事になります
2の補数の作り方
2の補数は次のように作ります
(正数) (1の補数) (2の補数)
0101 →ビット反転→ 1010 →1を足す→ 1011
1の補数はビットを反転
2の補数は1の補数に1をプラス
を頭に入れておきましょう。
また、2の補数(負数)から対の正数を求めるには同じことを行います
負数をビット反転して1を加えると対の数が出ます!
例
2進数「10000001」を10進数へ基数変換
この問題は符号なし2進数の場合答えは129
になりますが
問題文に符号付2進数の場合といったような記述があった場合
負数を2の補数で表現されます。
今回は符号付で扱います。
→先頭ビットが1なので2進数「10000001」は負数になります
固定小数点
コンピューター内部の数値の表現方法には固定小数点と浮動小数点があります。
今回は固定小数点についての説明です。
固定小数点
コンピュータ世界における小数の扱い方のひとつで、
小数点が特定の位置にある前提で扱うやり方
整数型で扱う場合最右端の右側に小数点
負数を扱う場合最左端ビットを符号ビットとした2の補数表現を使います
説明を見てるだけではわかりにくいので
例えば 2進数8ビットの固定小数点を用いる場合
最小値が10000000(10進数でー128)、最大値が01111111(10進数で127)です。
(最左端ビット) (最右端ビット)
↓ ↓
| | | | | | | | |. ←小数点
↑
(符号ビット:0または正数、1負数)
おつかれさまでした
おつかれさまでした!
2の補数などはよく過去問題に出てくるので作り方をしっかり覚えておきましょう
ビット反転して1プラス!
これを覚えてしまえば勝ちです(きっと)
今回もお付き合いいただきありがとうございました。
こうしたほうがわかりやすいよ!などあればコメントに残していただけると幸いです。
今回もこちらにお世話になりました↓(参考文書)
参考動画↓