French UnsignedShiftRight comment cela fonctionne ?

jp02

Member
Licensed User
Longtime User
Bonjour à tous et bonne année avec VB4A
Ma question du jour,
J'ai commencé à décodé le mode d'emploi bit à bit, j'en suis justement au mot clé bit.UnsignedShiftRight(x,y)

Je ne comprend pas son fonctionnement
Pouvez vous m'expliquer avec des exemples simples ?

Dim N_int As Int, shift_int As Int
N_int=-1000
shift_int=2

flags=Bit.UnsignedShiftRight(N_int,shift_int)
edittext1.text= flags
'me donne 1073741574 ? je n’arrive pas à expliquer
Merci
JP
 

klaus

Expert
Licensed User
Longtime User
Tout d'abord bonne année également.

Question: quel résultat espérais-tu ?

prenons un autre exemple que le tien:
le nomber entier 1000
sa représentation binaire est :
1111101000
Bit.UnsignedShiftRight(1000, 2) décale le nombre binaire de deux rangs vers la droite et ajoute des 0 à gauche (nombre binaire sans signe), donc
0011111010 ou
11111010
Le résultat en nombre entier est 250 ce qui correspont a notre attente.
Un décalage de 2 vers la droite correspond à une division par 4.

Dans ton exemple avec le nombre -1000
sa représentation binaire est :
11111111111111111111110000011000
décalage de vers la droite:
00111111111111111111111100000110
ce qui donne en nombre entier
1073741574

Si tu espérais un résultat de -250 il faut utiliser Bit.ShiftRight.
Bit.ShiftRight traite des nombres binaires avec le signe.
Dans ce cas le bit tout à gauche indique le signe
et Bit.ShiftRight ajoute à gauche soit des 0 ou des 1 selon le signe.

Meilleures salutations.
 

jp02

Member
Licensed User
Longtime User
Bien compris,
je prépare un mode d'emploi de B4A avec des exemples, pas une simple traduction, aussi j'ai besoin de tout comprendre. (et à mon âge...!)
C'est ce que j'avais fait quand j'ai écrit le mode d'emploi du Basic Bascom pour micro-contrôleur AVR qui date un peu maintenant.
Cordialement
JP
 
Top