Manipulation de bits

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 12 déc. 2007 à 00:16
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 15 déc. 2007 à 10:08
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 déc. 2007 à 07:00
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
12 déc. 2007 à 07:02
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
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
12 déc. 2007 à 23:08
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>
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
14 déc. 2007 à 11:11
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
14 déc. 2007 à 22:54
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>
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 déc. 2007 à 10:08
étrange ton processeur...

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

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
Rejoignez-nous