--------ここから余談------
正負の整数
4bitの整数を考える。
キーワード
・2進数(数値を0か1の数字のみで表した数)
・符号(+、ー)
・補数(補数2進数の補数は1の補数と、2の補数があるよ)
・符号ビット(符号を表しているビットのこと)
nビットの2進数は0~(2^n)-1まで表すことができる
(正の数だけならね = unsigned)
0000(2) => 0(10)
0001(2) => 1(10)
0010(2) => 2(10)
0011(2) => 3(10)
0100(2) => 4(10)
0101(2) => 5(10)
0110(2) => 6(10)
0111(2) => 7(10)
1000(2) => 8(10)
1001(2) => 9(10)
1010(2) => 10(10)
1011(2) => 11(10)
1100(2) => 12(10)
1101(2) => 13(10)
1110(2) => 14(10)
1111(2) => 15(10)
10000(2) => 1|0000(2) => 0
(入れ物4ビットしかないもん)
・負の数はどうやって表すの?
MSB→00000000←LSB
MSB(Most Significant Bit):最上位ビット(一番左のビットのこと)
LSB(Least Significant Bit):最下位ビット(一番右のビットのこと)
→符号付き絶対値表現(人に分かりやすくコンピュータにやさしくない方法)
・符号ビット+絶対値で数を表す(ここではMSBを符号ビットとする)= 普通の算数で習った負の数の表し方と同じ
絶対値=その数の、数直線上での0からの距離の事 -3 -2 -1 0 +1 +2 +3
符号ビットのルール 1:負の数 0:正の数
例:4ビットでMSBが符号ビットの時の6(10)の表現
(1bit符号ビット、3ビットが絶対値) 000~111(2)=0~7(10) (-7~+7まで表せる)
3bitで6は110(2)になるので、符号ビット0をつけて 0110(2) => 4ビット符号付き絶対値表現の+6
4ビットでMSBが符号ビットの時の-6(10)の表現
3bitで6は110(2)になるので、符号ビット1をつけて 1110(2) => 4ビット符号付き絶対値表現の-6
0000(2) => 0(10)
0001(2) => 1(10)
0010(2) => 2(10)
0011(2) => 3(10)
0100(2) => 4(10)
0101(2) => 5(10)
0110(2) => 6(10)
0111(2) => 7(10)
1000(2) => -0(10)
1001(2) => -1(10)
1010(2) => -2(10)
1011(2) => -3(10)
1100(2) => -4(10)
1101(2) => -5(10)
1110(2) => -6(10)
1111(2) => -7(10)
+6 0110
+ -6 +) 1110
-------- ---------
0 10100 ←全然0にならない(´;ω;`)
→2の補数表現(人に分かりづらくコンピュータにやさしい方法)
現在考えている数は4ビット
・0110に足して0になる数を考えて、それを-6の表現として採用する
・桁あふれ=数が4ビットで表現されているのに、計算などによって5ビット以上になって箱から数があふれてしまう状態
0110+1110=10110(4ビットしか表現できないのに5ビットになってしもた)10110 -> 1|0110 -> 0110
・1111+1=0000(2)を考えてみる。
+6→(4bit2進数)→0110
0110 + XXXX = 1111
0110 + 1001 = 1111
->(bit反転) 各桁の0->1 1->0にする
0110 + 1001 = 1111 + 1 = 10000 => 0000(4bitだもの)
0110 + (1001 + 1) = 0000
(1001+1)を-6として使ったら計算上都合よくね?
=1010を-6の表現として使う
111
0110
+ 1010
-------
10000 -> 1|0000 => 0000
・0110に対する1010の関係を2の補数という(0110の2の補数は1010である)
・2の補数を作るには
①考えているビット数で数を表す(足りない上位ビットは0で埋める) 4bitで10 → 0010
②ビット反転をする 1101(0010の1の補数)
③+1する 1110(0010の2の補数)
・2の補数に直したときにMSBが1のものを負の数とする
4ビットの負の数のみなさんの絶対値(=1引いて反転)を求めてみる
・1の補数=足すと全部のビットが1になる数
・2の補数=足すとちょうど桁あふれする数
(-1) (bit反転)
-8 1000(2) => 0111 => 1000 => 8
-7 1001(2) => 1000 => 0111 => 7
-6 1010(2) => 1001 => 0110 => 6
-5 1011(2) => 1010 => 0101 => 5
-4 1100(2) => 1011 => 0100 => 4
-3 1101(2) => 1100 => 0011 => 3
-2 1110(2) => 1101 => 0010 => 2
-1 1111(2) => 1110 => 0001 => 1
符号付き整数4ビットの表せる範囲はー8~+7
0000(2) => 0(10)
0001(2) => 1(10)
0010(2) => 2(10)
0011(2) => 3(10)
0100(2) => 4(10)
0101(2) => 5(10)
0110(2) => 6(10)
0111(2) => 7(10)
1000(2) => -8(10)
1001(2) => -7(10)
1010(2) => -6(10)
1011(2) => -5(10)
1100(2) => -4(10)
1101(2) => -3(10)
1110(2) => -2(10)
1111(2) => -1(10)