Problème de décalage à gauche sur un octet

Archive.
Gratteur
Messages : 147
Inscription : ven. 22/avr./2005 23:02

Problème de décalage à gauche sur un octet

Message par Gratteur »

Cet exemple parle de lui-même, notre ami l'octet se prend pour un long (et mon algo foire), c'est zarb.

Code : Tout sélectionner

b.b

b = %01100001
b << 4
Debug Bin(b)


b = %01101101
b << 4
Debug Bin(b)
Dernière modification par Gratteur le mer. 04/avr./2007 22:49, modifié 1 fois.
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

edit : je pense avoit trouvé !
.b est signé donc me 1er bit est pour le signe donc il faut 7 et non 8 chiffres.

si tu veux 8 chiffres, mets .c
Gratteur
Messages : 147
Inscription : ven. 22/avr./2005 23:02

Message par Gratteur »

Ouais je veux bien que la signature puisse entrainer des problème, mais la ce sont des calculs bit a bit et le bit de signature de devrait pas influer sur la longueur de la valeur. En fait on se retrouve avec autre chose qu'un octet ce qui est anormal (ou alors j'ai loupé quelque chose sur la représentation d'un octet).

Quelqu'un peut expliquer pourquoi cet octet devient un entier ?
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

après quelques tests, il n'y a que les nombres négatifs qui soient représentés en binaire sur 4 octets. (%1xxxxxxx)
Gratteur
Messages : 147
Inscription : ven. 22/avr./2005 23:02

Message par Gratteur »

zarb
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Problème de décalage à gauche sur un octet

Message par Backup »

Gratteur a écrit :Cet exemple parle de lui-même, notre ami l'octet se prend pour un long (et mon algo foire), c'est zarb.

Code : Tout sélectionner

b.b

b = %01100001
b << 4
Debug Bin(b)


b = %01101101
b << 4
Debug Bin(b)


pour moi c'est un bug a Montrer a Fred !! 8O
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

en fait bin attend un long donc l'octet est transformé en long et s'il est négatif le bit de poids fort sera le 32e...

suffit de faire Bin(b & $FF)

Dri
Répondre