パッケージの補数。 インポートjava.util.Scanner; パブリック クラス補体 { 公共 静的 ボイドメイン(文字列[]引数) { スキャナSC = 新しいスキャナ(System.in)。 System.out.println( "A整数的请输入一个(-127)-128" ); int型Originala; int型Originalb; 一方、(真) { Originala = sc.nextInt()。 もし(Originala> = -127 && Originala <= 128 ) { System.out.println( "Aは元のコードである:" + GetBinary(Originala)); IF(Originala> 0 ) { するSystem.out.println( "コードカウンタである:" + GetBinary(Originala)); システム.out.printlnは( "A補数は:" + GetBinary(Originala)); } 他 { するSystem.out.println( "コードカウンタである:" + getReverse(GetBinary(Originala))); のSystem.out .println( "Aの補数である:" + getComplement(getReverse(GetBinary(Originala)))); } BREAK 。 } {他 { のSystem.out.println( "範囲外、再入力してください" ); } } のSystem.out.printlnは( "入力(-127)-128整数A" ); 一方、(真の) { Originalb = SC .nextInt(); IF(Originalb> = -127 && Originalb <= 128 ) { するSystem.out.printlnは、( "Bは、元のコードである:" + GetBinary(Originalb)); IF(Originalb> 0 ) のSystem.out。 println( "逆符号Bは:" +GetBinary(Originalb)); のSystem.out.println( "Bの補数である:" + GetBinary(Originalb)); } 他 { するSystem.out.printlnは( "逆符号Bである:" + getReverse(GetBinary(Originalb ))); のSystem.out.printlnは、( "Bの補数である:" + getComplement(getReverse(GetBinary(Originalb)))); } BREAK ; } そうでなければ { するSystem.out.println(「範囲外、再入力してください" ); } } 文字列CA getComplement(getReverse(GetBinary(Originala)))。 = 文字列CB = getComplement(getReverse(getBinary(Originalb)))。 INT [] complementa = 新しい int型 [8 ]。 INT [] complementb = 新しい int型 [8 ]。 以下のために(int型、iは8 <; I = 0 iは++ ){ complementa [I] = Integer.parseInt(ca.charAt(I)+ "" )。 complementb [I] = Integer.parseInt(cb.charAt(I)+ "" )。 } のSystem.out.println( "按位与的结果:" )。 System.out.println(getBinary(Originala&Originalb)); System.out.println( "按位异或的结果:" ); System.out.println(getBinary(Originala ^ Originalb)); } パブリック 静的文字列getBinary(int型K) { 文字列str = "" ; もし(K == 0 ) リターン "00000000" 。 他 { int型フラグ= K> 0?1:0 。 K = K> 0?K:( - K)。 一方、(K!= 0 ) { STR= K%2 +STR; K = K / 2 。 } INT =でInteger.parseInt(STR)。 もし(フラグ== 1 ) { STR = String.Formatの( "%08D" 、IN)。 } 他 { STR = "1" + String.Formatの( "%07D" 、IN)。 } 戻りSTR。 } } パブリック 静的文字列getReverse(文字列str) { 文字列STR2 = "" ; 以下のための(int型I = 1; i)は(str.lengthを<; 私は++ ) { 場合(str.charAt(I)== '1' ) { STR2 = STR2 + "0" 。 } そう であれば(str.charAt(I)== '0' ) { STR2 = STR2 + "1" 。 } } リターン "1" + STR2。 } パブリック 静的文字列getComplement(文字列str) { 場合( "11111111" .equals(STR)) リターン "00000000" 。 { のIntインデックス= 0 ; 文字列STR2 = "" ; int型フラグ= IN(Integer.parseInt(str.charAt(7)+。 "== 2 1")+ 1):0 ;? // 1ないことを示すバイナリ0を表します。キャリー IF(フラグ== 1で。) { ため(INT I = str.length() - 1;私が> = 0; i-- ) { IF(フラグに== 1)// 必要が運ぶために、次に{ { IF(整数。 parseInt(str.charAt(I)+ "")+ 1 == 2 ) { STR2 = "0" + STR2。 フラグ = 1 。 } そう であれば(Integer.parseInt(str.charAt(I)+ "")+ 1 == 1 ) { STR2 = "1" + STR2。 インデックス = I; 破ります; } } } STR2 = str.substring(0、インデックス)+ STR2。 } 他 { STR2 = str.substring(0,7)+ "1" 。 } 戻りSTR2。 } } }