有符号数無符号数原符号補符号逆符号java用補符号で表す

3803 ワード

コンピュータの数字の保存は分けます:1、記号の数がなくて、2、記号の数があります
 
  • 符号なし:正数のみを表す.各桁数は2のべき乗次数を表します.アドレスのみ符号なしで,符号なしで算術操作を行わず,ポインタの加減を行う.アドレスはエラーの結果ではなく、空の操作(気泡)を生成するので、符号数なしでオーバーフローを考慮しない.
  •  
  • 符号数:負数を表すことができます.符号数には3つの表現法がある:1、原符号、2、補符号(コンピュータシステムでは、数値は一律に補符号で表す、記憶する)、3、逆符号
  • (ここでは8ビットの符号数を例に挙げます)
     
  • 原号:最上位シンボルビットは単純な正負シンボルを表し、他のビットは1は2^iを表す
  • 例:0000_0001は11000_を表します.0001代表-1
  • 逆数を求める:シンボルビット
  • を変更する
  • の欠点:結果が事前に分からないため、シンボルビットは追加のステップで演算する必要がある.早世する.


  •  
  • 補コード:規定x+~x=1111_1111= -1.最上位シンボルビットは1が-2^7を表し、他のビットは1が2^iを表し、1111_1111= -1
  • 例:
  •   0000_0000=0
  •   0000_0001=2^0=1
  •   0000_0010=2^1=2
  •   0000_0011=2^1+2^0=2+1=3
  •   ……
  •   0111_1111=2^6+2^5+2^4+2^3+2^2+2^1+2^0=128-1=127(最大)
  •   1000_0000=-2^7=-128(最小)
  •   1000_0001= -2^7+2^0= -128+1= -127
  •   1000_0010= -2^7+2^1= -128+2= -126
  •   ……
  •   1111_1111= -2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0= -128+64+32+16+8+4+2+1=-1

  • 逆数を求める:x+~x=-1のため、-x=~x+1
  • 欠点:いいえ、みんな
  • を使っています.

     
  • 逆符号:x+~x=0を規定する.すべての正数の逆は対応する負数であり、正数の最高位は0に予約され、逆を取った後の負数が1であり、別の正数にならないことを保証しなければならない.すべての正数を考慮:0-0111_1111、すべての負の数があります:1111_1111——1000_0000
  • 例:
  •   0000_0000=0,1111_1111= -0(0+(-0)=0)
  •   0000_0001=1,1111_1110= -1
  •   0000_0010=2,1111_1101= -2

  • 相反数を求める:逆符号の各ビットの意味は符号を補う直接がないので、符号を補う相反数を求める演算によってもう一つの減一操作を求めて
  • を逆符号で表す.
  • 欠点:演算ステップは補符号より多い.初期の科学計算だけが優位だった.


  •  
    小テスト:javaは補コードですか、それとも反コードですか.
    符号を補う.理由:
    証拠1:
    1         System.out.println(~0);
    2         System.out.println(~1);
    3         System.out.println(~2);
    4         //-1
    5         //-2
    6         //-3
    7         //         :0,-1,-2

    証拠2:
    1         System.out.println(Integer.MAX_VALUE);
    2         System.out.println(Integer.MIN_VALUE);
    3         //2147483647
    4         //-2147483648
    5         //         :2147483647,-2147483647,           ,   、  

    証拠3:
    1         System.out.println(Integer.toBinaryString(Integer.MAX_VALUE));
    2         System.out.println(Integer.toBinaryString(-Integer.MAX_VALUE));
    3         //01111111111111111111111111111111
    4         //10000000000000000000000000000001