Manipulation de bits

Signaler
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Bonjour à tous.
Je suis en train de faire un programme de gestion de bibliothèque de classe mais j'ai un problème dans la gestion des droits gérée avec une manipulation de bits. Pourriez-vous me dire ce qui cloche ??

Option Explicit

Public Function BitSet(N As Byte, B As Byte, Value As Boolean) As Byte
'This function set the bit "B" in the number "N" to the value "Value"
'Cette fonction met le bit "B" dans le nombre "N" à la valeur "Value"
If Value = True Then
 BitSet = N Or (2 ^ (B + 1))
 Else
  BitSet = N And (2 ^ (B + 1))
End If
End Function<hr />
Public Function BitGet(N As Byte, B As Byte) As Boolean
'This function retrive the bit "B" value in the number "N"
'Cette fonction récupère la valeur du bit "B" dans le nombre "N"
Dim tmp As Integer
Dim res As BooleanIf N And (2 ^ (B + 1)) Then res True Else res False
BitGet = res
End Function , ----
By Renfield

_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>

6 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
pas compris la question...

concernant le code...
Ajoutes bien tes ByVal/ByRef
ton calcul de puissances a remplacer par un moyen moins couteux.... (tableaux, par exemple)

If Value = True Then
s'ecrit
If Value Then

car Value est un Boolean

dans BitGet, tu peux simplement faire :
BitGet = CBool ( N And (2 ^ (B + 1)) )

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
une autre solution plus rapide consiste a mapper un tableau de bytes (une fois, au début de la manipulation d'une variable quelconque)

comme fait là:
http://www.vbfrance.com/codes/RGB-VICE-VERSA-TRES-RAPIDE_40189.aspx

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
oki... Mais il reste un GROS problème : lorsque j'appelle BitSet(2, 0, True)mais le problème c'est qu'il me renvoie 2 alors qu'il devrait renvoyer 3 !!
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
53
Salut,
En lisant le commentaire

'Cette fonction met le bit "B" dans le nombre "N" à la valeur "Value"
On Se demande alors pourquoi

 BitSet = N Or (2 ^ (B + 1)
) et non  BitSet = N Or (2 ^ B
)
(ou alors j'ai pas compris....)
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Ouais bon... Pas très cohérent mais cela ne me dit malheureusement pas qu'est-ce qui ne fonctionne pas !
_______________________________________________________________________
VB.NETis good ...VB6is better <f></f>
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
étrange ton processeur...

n = 6  
soit =>  110 
? n or 2^3
14
soit =>  1110
, ----
By Renfield

Renfield
Admin CodeS-SourceS- MVP Visual Basic