- 45K,
Bonjour, je devais réaliser 4 fonctions qui effectuent des opérations bits à bits , pouvez-vous m’aider s’il vous plaît :):
- la première fonction s’appelle :
typedef unsigned long long Mot64;
int equiv_rotation(Mot64 x, Mot64 y)
elle vérifie si les premiers bits du premier nombre sont les mêmes que le deuxième à une rotation près par exemple sur 8 bits, les nombres 01110010 et 01001110 sont les mêmes par une rotation de 3 bits vers la droite : 0110010 ->01001110
- la deuxième fonction s’appelle :
int plus_long_suffixe(Mot64 x , Mot64 y)
La fonction renvoie la taille du plus grand suffixe commun dans l’ecriture binaire des deux nombres par exemple : 0100110 et 0101110 ont comme plus grand suffixe commun les 3 bits 110
- la troisieme fonction s’appelle :
int nb_101(Mot64 x)
La fonction est paramétrée par un nombre de 64 bits et qui renvoie le nombre de fois que l’on peut rencontrer un bit à 1 suivi d’un 0, lui-même suivi d’un 1. Par exemple, la fonction appelée avec le nombre 11011101010…0 renvoie 3 à cause des trois occurrences 11011101010…0, 11011101010…0 et 11011101010…0 du motif 101.
- la dernière fonction s’appelle:
int Harming(Mot64 x , Mot64 y )
La fonction est paramétrée par deux nombres de 64 bits et qui renvoie le nombre de leurs bits qui sont différents, position par position. Par exemple, la fonction appelée avec les nombres 110010…0 et 011010…0 renvoie 2.
int equiv_rotation(Mot64 x , Mot64 y){
int cmpt = 1;
for(int i = 0 ; i < 64 ; i++){
if((y << 1) & 1 == (x >> 1) & 1 ) --cmpt;
else{
if(cmpt <= 0) return 1;
return 0;
}
x = x >> 1 ;
y = y << 1 ;
}
return 1;
}
int plus_grand_suffixe(Mot64 x , Mot64 y ){
if(x & 1 != y & 1) return 0;
return 1 + plus_grand_suffixe(x >> 1 , y >> 1 );
}
int Harmin(Mot64 x , Mot64 y){
int cmpt = 0;
for(int i = 0 ; i < 64 ; i++){
if(x & 1 != y & 1) ++cmpt;
x = x >> 1 ;
y = y >> 1 ;
}
return cmpt ;
}
int nb_101(Mot64 x){
Mot64 res = 0;
int cmpt = 3;
nbtotal = 0;
for(int i = 0 ; i < 64 ; i++){
res |= ((x>> 1) & 1) << 1;
--cmpt ;
if(cmpt == 0){
if(res == 5) ++nbtotal;
res = 0;
}
x = x >> 1 ;
}
return nbtotal;
}
Je vous remercie d’avance.