2016-04-13 7 views
0

Ich bin mit Java herum und bin mir nicht sicher, warum das Endergebnis in binary eine zusätzliche Zahl hinzufügt, als gewünscht. Ich möchte 8-Bit drucken, nicht mehr oder weniger. Ich habe verschiedene Methoden ausprobiert, aber immer noch kein Glück. Hier ist, was ich bisher habe.Hinzufügen von Binärzahlen in Java ohne Verwendung der integrierten Methode?

Was mache ich falsch?

public static void main(String[] args) { 
     Scanner sn = new Scanner(System.in); 


     int i,m,n,sum,carry=0; 
    System.out.println("Enter your first binary number: "); 
        int n1 = sn.nextInt(); 

        System.out.println("Enter your second binary number: "); 
        int n2 = sn.nextInt(); 

        for (i=arr.length-1;i>=0;i--){ 
        m=n1%10; 
        n=n2%10; 
        n1=n1/10; 
        n2=n2/10; 
        sum=m+n+carry; 

         if (sum==1) { 
          arr[i]=1; 
          carry=0; 
          } 

          else if(sum==2) { 
           arr[i]=0; 
           carry=1; 
          } 

          else if(sum==3) { 
           arr[i]=1; 
           carry=1; 
          } 

          else { 
          arr[i]=m+n+carry; 
         } 
        } 

        for(i=0;i<arr.length;i++){ 
         System.out.print(arr[i]); 
         } 
       } 
+0

was 'arr' ist - wie sieht Ihr' for' Schleife noch arbeiten? –

+0

sollte es nicht 'sonst sein {arr [i] = 0; carry = 0;} ' – maraca

+0

In jeder Sprache, in der ich binary benutze ich immer einen Filter, um die Bitbreite zu begrenzen. – Sparky256

Antwort

0

in jeder Sprache wo ich verwende ich binäre Bitbreite zu begrenzen immer einen Filter verwenden, um:
.arr [i] = m + n + tragen & 255;
Dies ist möglicherweise nicht die vollständige Antwort, nur eine grundlegende Stop-Gap für Bit-Überlauf.
Dieser '& 255'-Filter darf nicht mehr als 8 Bit durchlassen. Außerdem erzeugt es bei Bedarf führende Nullen.

0

Ihre Summe 0 sein kann, 1, 2 oder 3. Sie für 1 bis 3 überprüfen, so dass die else für 0. Die Linie ist (arr[i]=m+n+carry;) falsch ist, sollte es arr[i] = 0; carry = 0;

oder einfach entfernen die ganze if Block sum und gehen Sie wie folgt zu analysieren:

carry = sum/2; // integer division 
arr[i] = sum % 2; // modulo 
Verwandte Themen