元のコードは、区別するために、抗コードを補完します

元のコード、補体、抗コードは、バイナリモードでコンピュータに記憶されます。

オリジナルコードは:マシンの数の最も簡単な表現です。最上位ビットで表されるシンボルビットは、「1」、「0」、負の符号を示し、正の数を表します。他のビットは、バイナリ数の絶対値を格納します。

アンチコード:正の抗コードまたは元のコードに等しいです

反転負の符号ビット、ビット単位に加えて、彼の元のコードです。

補完:彼の元のコードに等しい正の補数
+1に等しい負の抗コード補完を。

コンピュータの中に補数を格納するために使用されます。

例えば

整数(INT)45 32 4バイトの整数

オリジナルコード:0,000,000,000,100,111

アンチコード:1,111,111,111,011,000

補完:000 000000100111

整数(int型)-45

オリジナルコード:1,000,000,000,100,111

アンチコード:1,111,111,111,011,000

補完:1,111,111,111,011,001

次のようにJava言語変換のintを達成します:

  1つの パッケージClassroomTest。
  2  
  3  インポートjava.util.Scanner。
  4  
  5  パブリック クラス第{
   6  
  7  
  8      
  9      @SuppressWarnings( "リソース" 10      公共 静的 ボイドメイン(文字列[]引数){
 11          INT S [] = 新しい INT [32 ]。
12          のint Y [] = 新しい INT [32 ]。
13          INT [] = F 新しい INT [32 ]。
14          INT0 = I ;
 15          int型C、
 16          スキャナSC = NULL ;
 17。          のSystem.out.println( "整数を入力してください" );
 18である          SC = 新しい新しいスキャナ(System.in);
 19。         int型 A = sc.nextInt() ;
 20          IF(A> = 0){   // 分析整数
21は         、一方(A> = 1){    // 格納された元のコード
22はれる              Cが2%= ;
 23である              S [I] = C; 
 24              A = A / 2 ;
 25              私は++ ;
 26です         }
 27           のint jを;
28           J = 31 29          のために(; iは<s.length; I = 0 iは++ ){
 30                  Y [J] =のS [i]は、
31                  j-- 32              }
 33          のSystem.out.println();
34         のSystem.out.println( "原码:")。  // 输出原码    
35         (i = 0; iは<y.length; iは++){      // 符号位为0 
36             System.out.print(Y [I])。
37                であれば((I + 1)%4 == 0 ){
 38                    System.out.print(」 ");
39              }
 40          }
 41         のSystem.out.println();
42         のSystem.out.println( "反码:")。  // 输出反码全部取反
43         のための(I =(y.length-1); I> = 0; i-- ){
 44             であれば(Y [I] == 0 ){
 45                 F [I] = 1 ;
46             } {
 47                 F [I] = 0 ;
48             }
 49         }
 50         (i = 0; iは<f.length; iは++ ){
 51             System.out.print(F [I])。
52は、               IF((I + 1)== 0 4%){
 53が                    System.out.print( ""の);
 54である             }
 55         }
 56である        のSystem.out.println();
 57である         のSystem.out.println(「補完します: ;「)    // 元のコードの同じ補数出力
58         のために(;私は<y.length; I ++はI = 0 ){
 59             System.out.print(Y [I])の、
 60                IF((I + 1)% == 0.4 ){
 61は                    System.out.print( ""の);
 62である             }
 63れる         }
 64      }  {  // 入力された整数が負の場合
65          A = - ;
 66          ながら(A> = 1 ){
 67              Cは、%= 2 ;
 68の              S [I] = C;
 69              A = A / 2 ;
 70は、              I ++は71です         }
 72           INT J、
 73は           J = 31であり74          のために(I = 0; Iはs.lengthを<; Iは++ ){
 75                  Y [J] = S [I];
 76                  J、;
 77              }
 78          。Y [0] = 1;
 79          のSystem.out.println();
 80         のSystem.out.println( "オリジナルコード:");   // 出力プリミティブ
81         のための(I = 0; I <y.length; Iは++){      // 符号ビット。1 
82             System.out.print(Y [I])の、
 83                IF((I + 1)== 0 4%。){
 84                    System.out.printの( "" );
 85              }
 86          }
 87         のSystem.out.println ();
 88         のSystem.out.println( "アンチコード:");   // 逆符号の出力
89         のための(I =(1-y.length); I> = 0; i--){   // 符号ビットがありませんバリアント、他のデジタルが否定
90             であれば(Y [I] == 0 ){
 91                 F [I] = 1 92             } {
 93                 F [I] = 0 ;
94             }
 95         }
 96         F [0] = 1 97         のために(; iは<f.length; I = 0 iは++ ){
 98             System.out.print(F [I])。
99                であれば((I + 1)%4 == 0 ){
 100                    System.out.print(」 " )。
101              }
 102         }
 103         のSystem.out.println();
104         のSystem.out.printlnは( "補完:");   // 出力は補完
105         I = 31であり106         F [31である] = F + +1 [31である] ;
 107         ながら(私は> = 0){     // 変換逆補基準に+ +1 
108             IF(F [I] == 2 ){
 109                 F [I] = 0 ;
 110                 [1-I] F [1-I] = F + +1 ;
 111             } そう
112             {
 113                 F [I] = 1 ;
 114             }
 115             i-- ;
 116         }
 117        
118         のための(; iは<f.length; I = 0 iは++ ){
 119             System.out.print(F [I])。
120                もし((I + 1)%4 == 0 ){
 121                    System.out.print(」 " )。
122              }
 123          }
 124          
125      }
 126          
127  }
 128 }

結果は以下の通りであります:

整数を入力:
-32

オリジナルコード:
1,000,000,000,000,000 0,000,000,000,100,000
反転:
1,111,111,111,111,111 1,111,111,111,011,111
相補:
1,111,111,111,111,111 1,111,111,111,100,000

 

整数を入力:
32

元のコード:
0000 0000 0000 0000 0,000,000,000,100,000
反転:
1,111,111,111,111,111 1,111,111,111,011,111
補:
0000 0000 0000 0000 0,000,000,000,100,000

 

収穫:

元のコードは正の整数、反転、特別な場所補体、特別なメモリと、負の整数が、元のコードは、符号ビットが1であり、そして抗コードをバイナリに変換した後、正の整数の後にシークすることに留意すべきために、注意ビット除去符号ビット反転、反転基準に1を加えることによって反転の数以外(バイナリで計算することを忘れないでください)。

 

おすすめ

転載: www.cnblogs.com/cxy0210/p/11540918.html