--------ここから余談------ 正負の整数 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)