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 diagrammesSource recopiable (cliquez sur le lien)