Traduction en Java
Méthodes d'opérations sur 8 bits
Une classe Java solution du problème :

class Application8Bits {
//  Integer.MAX_VALUE : 32  bit = 2147483647
//  long.MAX_VALUE : 64 bits = 9223372036854775808
 
static void main(String[] args){
   int n,p,q,r,t;
   n =9;// 000...1001
   System.out.println("n=9 : n="+Integer.toBinaryString(n));
   p = BitCLR(n,3);// p=1
   System.out.println("BitCLR(n,3) ="+Integer.toBinaryString(p));
   q = BitSET(n,2);// q=13
   System.out.println("BitSET(n,2) ="+Integer.toBinaryString(q));
   r = BitCHG(n,3);// r=1
   System.out.println("BitCHG(n,3) ="+Integer.toBinaryString(r));
   t = BitCHG(n,2);// t=13
   System.out.println("BitCHG(n,2) ="+Integer.toBinaryString(t));
   System.out.println("p = "+p+", q = "+q+", r = "+r+", t = "+t);
   n =-2147483648;//1000.....00 entier minimal
   System.out.println("n=-2^31 : n="+Integer.toBinaryString(n));
   p=ROL(n,3);// 000...000100 => p=4
   System.out.println("p = "+p);
   n =-2147483648+1;//1000.....01 entier minimal+1
   System.out.println("n=-2^31+1 : n="+Integer.toBinaryString(n));
   p=ROL(n,3);// 000...0001100 => p=12
   System.out.println("p = "+p);
   n =3;//0000.....0 11 
   System.out.println("n=3 : n="+Integer.toBinaryString(n));
   p=ROR(n,1);//100000...001 => p=-2147483647
   System.out.println("ROR(n,1) = "+p+"= "+Integer.toBinaryString(p));
   p=ROR(n,2);// 11000...000 => p= -1073741824
   System.out.println("ROR(n,2) = "+p+"= "+Integer.toBinaryString(p));
   p=ROR(n,3);// 011000...000 => p= +1610612736 =2^30+2^29
   System.out.println("ROR(n,3) = "+p+"= "+Integer.toBinaryString(p));
  }
static  int  BitSET(int nbr, int num)
{ // positionne à 1 le bit de rang num
        int mask;
         mask =1<< num;
        return nbr | mask;
}
static  int  BitCLR(int nbr, int num)
{ // positionne à 0 le bit de rang num
        int mask;
         mask = ~ (1<< num);
        return nbr & mask;
}
static int  BitCHG(int nbr, int num)
{ // complémente le bit de rang num (0 si bit=1, 1 si bit=0)
        int mask;
         mask =1<< num;
        return nbr ^ mask;
}
static int DecalageD (int nbr, int n)
{ // décalage sans le signe de n bits vers la droite 
        return nbr >>> n ;
}
static int DecalageG (int nbr, int n)
{ // décalage de 2 bits vers la gauche 
        return nbr << n ;
}
static int BitRang (int nbr, int rang)
{ //renvoie le bit de rang fixé
        return (nbr >>> rang ) % 2;
}
static int  SetValBit (int nbr, int rang,int val)
{ //positionne à val le bit de rang fixé
  return    val ==0 ? BitCLR( nbr,rang):BitSET( nbr,rang) ;
}
static int ROL (int nbr, int n)
{ //décalage à gauche avec rotation
        int C;
        int N = nbr;
        for(int i=1; i<=n; i++)
         {
            C = BitRang(N,31);
            N = N <<1;
            N = SetValBit(N,0,C);
         }
        return N ;
}
static int ROR (int nbr,int n)
{ //décalage à droite avec rotation
        int C;
        int N = nbr;
        for(int i=1; i<=n; i++)
         {
            C = BitRang(N,0);
            N = N >>> 1;
            N = SetValBit(N,31,C);
         }
        return N ;
}
}

Image en diagrammes structurés JGrasp-Like du programme

informations sur les diagrammes

Source recopiable (cliquez sur le lien)
 

Remonter