Somme nombre binaire

Contenu du snippet

Cette classe a pour but de convertir un nombre de la base 10 à la base 2, tout en fixant le radix qui est le nombre de bit avec lequel le nombre dans la base 2 vas être affiché....
pour application, on va calculer la somme de deux nombres au choix ....

Source / Exemple :


import java.math.*;
import java.util.*;
import java.lang.*;
/**
 *

  • @author scupper
  • @since Fri Feb 25 , At: 1:02
  • /
public class NombreBaseBinaire { private int radix = 0; public void setRadix(int radix){ this.radix = radix; } public int max(int a , int b){ return (a>b)?a:b; } public int min(int a , int b){ return (a>b)?b:a; } public Vector setRadix(Vector V,int radix){ Vector VV = new Vector(); int diff; if((diff =this.radix-V.size())>0){ for(int i=0;i<diff;i++){ VV.add(0); } for(int i=diff;i<this.radix;i++){ VV.add(V.get(i-diff)); } }else{ VV = V; } return VV; } public Vector intToBinaire(int n){ Vector v = new Vector(); Vector V = new Vector(); Vector VV = new Vector(); int iteration=0; int diff; //Division euclidienne dans la base 2 et insertion dans un vecteur while(n>0){ v.add(iteration, n%2); n/=2; iteration++; } //on inverse l'ordre des éléments du vecteur précédents pour avoir n en base 2 for(int i=0;i<v.size();i++){ V.add(v.get(v.size()-i-1)); } /**
  • Début du formatage en N bits qui est Définis par N = radix
  • /
if((diff =this.radix-V.size())>0){ for(int i=0;i<diff;i++){ VV.add(0); } for(int i=diff;i<this.radix;i++){ VV.add(V.get(i-diff)); } }else{ VV = V; } /**
  • Fin du formatage
  • /
return VV; } public Vector sommeBinaire(Vector v,Vector w){ Vector x = new Vector(); Vector V = new Vector(); Vector W = new Vector(); Vector X = new Vector(); boolean Rin = false , Sig ,a , b; int radix = max(v.size(),w.size()); setRadix(v,radix); setRadix(w,radix); //on inverse l'ordre des éléments des vecteurs for(int i=0;i<v.size();i++){ V.add(v.get(v.size()-i-1)); W.add(w.get(w.size()-i-1)); } /**
  • soit Sig la somme et Rin la retenue d'entrée et Rout la retenue en sortie de l'additionneur
  • on a :
  • Sig = a xor b xor Rin
  • Rout = [Rin and (a xor b)] or (a and b)
  • /
for(int i=0;i<radix;i++){ if(Integer.parseInt(V.get(i).toString())==1)a = true; else a = false; if(Integer.parseInt(W.get(i).toString())==1)b = true; else b = false; Sig = (a ^ b) ^ Rin; Rin = (Rin & (a ^ b)) | (a & b); System.out.println("a = "+a+" b = "+b+" Sig = "+Sig +" Rin = " +Rin); if(Sig==true) x.add(1); else x.add(0); } //on inverse l'ordre des éléments du vecteur for(int i=0;i<v.size();i++){ X.add(x.get(x.size()-i-1)); } setRadix(X, radix); return X; } public static void main(String[] args){ NombreBaseBinaire obj = new NombreBaseBinaire(); Vector v ; obj.setRadix(16); v = obj.intToBinaire(243); Vector w ; obj.setRadix(16); w = obj.intToBinaire(26); Vector x = obj.sommeBinaire(v, w); System.out.print(" "); for(int i=0;i<v.size();i++){ System.out.print(v.get(i)); } System.out.println(); System.out.println(" + "); System.out.print(" "); for(int i=0;i<v.size();i++){ System.out.print(w.get(i)); } System.out.println(); System.out.println(" ---------------------- "); System.out.print(" = "); for(int i=0;i<v.size();i++){ System.out.print(x.get(i)); } System.out.println(); } }

Conclusion :


Comme sortie du programme on aurait :

run:
0000000011101010
+
0000000000011011
----------------------
= 0000000011110001
BUILD SUCCESSFUL (total time: 0 seconds)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.