Maths, Informatique, Jeux
Site Web réalisé par Frédéric et François WANG
Répertoire principalInformatiqueProgrammationDiversGestion des mot

Lecture des bits d'un entier

Avec l'opération ET bit à bit, on va pouvoir lire chaque bit d'un entier. Pour cela, on va construire un masque de bits. Prenons l'exemple d'un Octet A et d'un masque M = 1 (0000001 en binaire). L'opération A ET M bit à bit, va donner FAUX pour tous les bits sauf pour celui de poids le plus faible qui dépendra de la valeur du bit de poids le plus faible de A. On obtiendra donc A ET M = 0 (FAUX) si le bit de poids le plus faible de A est 0 et A ET M = 1 (VRAI) s'il vaut 1.

'Programme de lecture des bits d'un nombre en BASIC par Frédéric Wang
CLS' Efface l'écran
PRINT "Quel nombre voulez-vous lire "; ' Affiche du texte à l'écran
INPUT A ' Demande le saisie d'un nombre entier.
CLS
PRINT "Voici les 16 premiers bits du nombre"; A; ": ";' Affiche la valeur de A
FOR N = 0 TO 15 ' Boucle en donnant à N des valeurs entières de 0 à 15.
M = 2 ^ N ' Calcule le masque M en fonction de N. (^ signifie puissance)
PRINT CHR$(48 + SGN(M AND A)); 'Affiche le N^e bit de A.
NEXT N ' fin de la boucle.
SLEEP ' Attend l'appuie d'une touche.
END'Arrête le programme.
//Programme de lecture des bits d'un nombre en C par Frédéric Wang
#include <stdio.h>// Librairie pour les fonctions scanf, printf
#include <conio.h>// Librairie pour clrscr, getch
#include <math.h>// Librairie pour pow2

#ifndef SGN // Définit la fonction SGN(x)
#define SGN(x) ( (x) > 0 ? 1 : ((x)<0 ? -1 : 0))
#endif

int main() // Fonction principale du programme
{
unsigned int A,M;// Déclare l'entier A à lire traiter, et le masque M.
unsigned char N;// Déclare N, position du bit à lire.
clrscr();//Efface l'écran.
printf("Quel nombre voulez-vous lire ? ");// Affiche du texte.
scanf("%d",&A);//Demande le saisie d'un nombre entier.
clrscr();
printf("Voici les 16 premiers bits du nombre %d : ",A);//Affiche la valeur de A
for(N=0;N<16;N++){
M=pow2(N);printf("%d",SGN(M&A) );}
getch();//Attend l'appuie d'une touche.
}
Télécharger lecture.zip (49 ko)

En modifiant le masque, on va pouvoir lire plusieurs bits en même temps. Par exemple, sur 1 octet (8 bits) on peut coder un entier de 0 à 255, mais on peut aussi coder 2 entier sur 4 bits chacun qui prennent chacun des valeurs de 0 à 15. Exemple : A ET(00001111) lit le premier entier, et (A ET (11110000))/16 lit le 2e entier. Voici une fonction en C pour lire un entier :

long Lire(long Entier,unsigned char Dbit, unsigned char Longueur)
{
long N; // Déclare un entier N.
if(!Dbit||Dbit>24)return -1; // Vérifie que Le bit de départ est compris entre 1 et 24.
if(!Longueur || (Dbit+Longueur)>25)return -1; // Vérifie que la longueur en bit de l'entier à lire est valide.
N=(pow2(Dbit+Longueur-1)-pow2(Dbit-1)); // Calcul masque par la méthode décrite dans nos démos.
return (Entier&N)/pow2(Dbit-1); //Retourne l'entier lu.
}
Cette page est conforme aux normes du W3C - Auteur : Frédéric WANG - Dernière mise à jour : dimanche 11 juillet 2004
Valid XHTML 1.1 Valid MathML 2.0 Valid SVG Valid CSS Amaya, the W3C browser/editor Déclaration qualité Opquast Firefox