パソコンへの記憶について(符号あり)
いままでは0〜の整数を扱う型を理解してきたのですが、マイナスの整数も扱わなくてはならないときもあります。こんなときにはshort
int型 int型 long int型を使用します
マイナスを使う型の約束事
例 8ビットで考えてみる。
1)最上位ビットは符号ありなしの判定に使い、0ならば正、1ならば負とする。
2)数字を扱える部屋は7個(7ビット)となる。
3)10進数から2進数への変換、2進数から10進数への変換には2の補数を考えなければならない。
(なんだか訳のわからないことを書きました。具体的に数字を使って説明したほうが簡単かもしれません。)
符号 | ? | ? | ? | ? | ? | ? | ? |
1)?に入る最大の数字は1111111となります。正の場合は符号に0がつきますから01111111となります。
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
[01111111(2進数)→127(10進数)] ですから最大の数字は127となります。
2)?に入る最小の数字は0000000となります。負の場合は1がつきますから1000000となります。
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
3)負の数を使う型では最上位ビットが1のものは、そのまま10進数に変換してはなりません。2の補数を使わなければならないのです。
(2の補数の考え方)
10000000を2の補数を使って変換する。
1.数字を反転する。10000000を1と0を反転し、01111111とする。
2.01111111に1を加える(繰り上がり計算する。)01111111+1→10000000
3.2の補数を使って変換した10000000を10進数に変換して、最上位ビットは1であったので−をつける。10000000→ー128
4)以上のことより10000000は10進数ではー128となる。
(例題ー1)
10進数でー100を2進数に変換する。(記憶)
1) −を取って100を2進数に変換する。100→1100100
2) 1100100を部屋に入れる。全部で8ビットなので最上位ビットは空白とになっているので0を入れる。1100100→01100100
3) 2の補数を考える(反転して1を加える操作)。
1.反転:01100100→10011011
2.1を加える:10011011+1→10011100
4) 2の補数で求めた2進数を部屋に記憶させるこれがー128の表現となる。
1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
(例題ー2)
2進数の10011100を10進数に変換する。(読み出し)
1) 最上位ビットは1で負であるので、そのまま10進数には変換できないため2の補数を使って変換する。
2) 2の補数で考える。
1.反転:10011100を反転する 10011100→01100011
2.1を加える:01100011+1→01100100
3) 01100100を10進数に変換する。01100100→100
4) 最上位ビットは1であったので−符号をつけてー100とする。
(例題ー3)
10進数のー300を2進数に変換する。
1) −を取って300を2進数に変換する。300→100101100
2) 100101100の9個の数字を部屋に入れる。全部で9ビットなの16ビットの部屋を準備する。最上位ビットは空白とになっているので0を入れる。100101100→00 00000100101100
3) 2の補数を考える(反転して1を加える操作)。
1.反転:0000000100101100→1111111011010011
2.1を加える:1111111011010011+1→1111111011010100
4)2の補数で求めた2進数を部屋に記憶させるこれがー300の表現となる。
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
2進数の1111111011010100を10進数に変換する。
1) 最上位ビットは1で負であるので、そのまま10進数には変換できないため2の補数を使って変換する。
2) 2の補数で考える。
1.反転:1111111011010100を反転する 1111111011010100→0000000100101011
2.1を加える:0000000100101011+1→0000000100101100
3) 0000000100101100 を10進数に変換する。0000000100101100 →300
[(00000001|00101100)→(1|44)・・・・・・1×256+44→300]
4) 最上位ビットは1であったので−符号をつけてー300とする。