--------ここから余談------
正負の整数
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)
  • game-engineer/classes/2021/game-programing-1/first-term/7/7-15-1/7-15-2.txt
  • 最終更新: 4年前
  • by root