import javax.swing.JOptionPane; public class SommaComplementoADue { public static final int LUNGH=32; public static String convertiBinario(int n) { if(n==0) return "0"; else { String s=""; while(n>0) { int cifraBin = n%2; s = cifraBin + s; n = n/2; } return s; } } /* versione che usa un oggetto StringBuffer * La classe StringBuffer permette di rappresentare una stringa * che puo' essere modificata. Infatti, a differenza della classe String * contiene metodi del tipo insert(...) e setStringAt(...) */ public static String convertiComplADueBis(int n) { StringBuffer numero = new StringBuffer(convertiBinario(Math.abs(n))); for(int i=numero.length(); i=0) { if(numero.charAt(i)=='0') numeroInComplemento = "1" + numeroInComplemento; else numeroInComplemento = "0" + numeroInComplemento; i--; } return numeroInComplemento; } else return numero; } private static int cifra(char c) { if(c=='0') return 0; else return 1; } public static String sommaInCompl(String b1, String b2) { String s=""; int riporto=0; for(int i=LUNGH-1; i>=0; i--) { int tot = cifra(b1.charAt(i)) + cifra(b2.charAt(i)) + riporto; if(tot<=1) { riporto=0; if(tot==0) s="0"+s; else s="1"+s; } else { riporto=1; if(tot==2) s="0"+s; else s="1"+s; } } return s; } public static void main(String[] x) { int n1=Integer.parseInt(JOptionPane.showInputDialog("Digita il primo numero\n(in base 10, positivo o negativo)")); int n2=Integer.parseInt(JOptionPane.showInputDialog("Digita il secondo numero\n(in base 10, positivo o negativo)")); String bin1 = convertiComplADue(n1); String bin2 = convertiComplADue(n2); String somma = sommaInCompl(bin1, bin2); JOptionPane.showMessageDialog(null, bin1+" +\n"+bin2+" =\n\n"+somma); System.exit(0); } }