Bonsoir,
j'ai un byte dont je voudrai forcer le 5 bit à 0
par exemple 108 me donnerai 100 01101100 donne 01100100
et bien sur 01100100 resterait 01100100 !
John
J'ai, essaye des XOr et And sans succes
Bonsoir,
j'ai un byte dont je voudrai forcer le 5 bit à 0
par exemple 108 me donnerai 100 01101100 donne 01100100
et bien sur 01100100 resterait 01100100 !
John
J'ai, essaye des XOr et And sans succes
Une petite précision :
Le premier bit d'un nombre, c'est clui qui est à droite !!!
Donc en fait ce que tu veux c'est mettre à 0 le bit 3 (si on commence au bit de poids faible = bit 0)...
Un Nbr and 11110111 donc... Mais comme en Delphi on ne peut pas représenter de nombre binaire, faut que tu le convertisses en hexa ou en décimal !
11110111 en hexa, ça fait : $F7
Donc tu auras :
Bonne prog' !
Code : Sélectionner tout - Visualiser dans une fenêtre à part NewVal := Val and $F7;
Bestiol.
En réalité de viens de chez Motorola alors pour moi le bit de fauche est le zéro
Mais on ne va pasz refaire la guerre aux indiens!
John
Ah ok, désolé !
Enfin le principe reste le même !
V'là tout ce qu'il te faut :
Bien sûr, on peut encore optimiser avec de l'assembleur inline, mais bon, c'est pas forcément nécessaire sauf si la vitesse d'exécution est primordiale.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 // Calcule un masque binaire (Rank entre 0 et 31). Function Mask ( Rank : Integer ) : Cardinal ; Begin Result:=1 Shl Rank ; End; // Positionne le bit de rang Rank dans le mot Val, renvoie le résultat. Function SetBit ( Val : Cardinal ; Rank : Integer ) : Cardinal ; Begin Result:=Val Or Mask(Rank); End; // Annule le bit de rang Rank dans le mot Val, renvoie le résultat. Function ClrBit ( Val : Cardinal ; Rank : Integer ) : Cardinal ; Begin Result:=Val And (Not Mask(Rank)); End; // Inverse le bit de rang Rank dans le mot Val, renvoie le résultat. Function NegBit ( Val : Cardinal ; Rank : Integer ) : Cardinal ; Begin Result:=Val Xor Mask(Rank); End; // Teste le bit de rang Rank dans le mot Val, renvoie True s'il vaut 1, False sinon. Function TstBit ( Val : Cardinal ; Rank : Integer ) : Boolean ; Begin Result:=(Val And Mask(Rank))<>0; End;
Partager