Page 1 sur 1

Décalage valeur binaire supérieur à 31 >> ?

Publié : mar. 04/juin/2013 15:14
par Fig
Bonjour,

Je n'avais pas remarqué auparavant mais le très pratique '>>' et '<<'ne fonctionne pas au dela de 31 bits.

Il est domage que Pb ne le fasse pas en natif...

Peut être que sur la version 64bts de PB, ça fonctionne (??)

Suis je passé à coté ou me trompe je ?

Je multiplierai et diviserai par une puissance de 2 sinon, tant pis... :?

Re: Décalage valeur binaire supérieur à 31 >> ?

Publié : mar. 04/juin/2013 15:53
par Backup
tiens je viens de te faire une procedure , qui est capable de rotationner un nombre binaire illimité !! :)

meme que ; ça va meme marcher avec du texte :)

Code : Tout sélectionner


Declare.s Rol(sens.s,chaine.s,pas)



binaire.s="11100011100011100011100011100011" ; 32 bits ... nombre de bit illimité !! 

; rotation a droite
debug binaire.s +" : original" 
debug Rol("->",binaire.s,1)+ "---> x1 rotation vers la droite 1 cran"
debug Rol("->",binaire.s,2)+"---> x2 rotation vers la droite 2 crans"
; rotation a gauche
Debug ""
debug Rol("<-",binaire.s,1)+"<---- x1  rotation vers la gauche 1 cran"
debug Rol("<-",binaire.s,2)+"<---- x2 rotation vers la gauche 2 cran"
debug " --------------------------------------"
Debug "marche aussi avec du texte du coup "

binaire.s="Codé par Dobro"
debug Rol("->",binaire.s,1)+ "---> x1 rotation vers la droite 1 cran"
debug Rol("->",binaire.s,2)+"---> x2 rotation vers la droite 2 crans"
Debug ""
debug Rol("<-",binaire.s,1)+"<---- x1  rotation vers la gauche 1 cran"
debug Rol("<-",binaire.s,2)+"<---- x2 rotation vers la gauche 2 cran"



Procedure.s Rol(sens.s,chaine.s,pas)
	; By Dobro
	select sens.s
		Case "->"
		extr.s=right(chaine.s,pas)
		ph.s=left(chaine.s,len(chaine.s)-pas)
		chaine.s=extr.s+ph.s
		Case "<-"
		extr.s=left(chaine.s,pas)
		ph.s=mid(chaine.s,pas+1,len(chaine.s))
		chaine.s=ph.s+extr.s
	EndSelect
	ProcedureReturn chaine.s
EndProcedure
; EPB

Re: Décalage valeur binaire supérieur à 31 >> ?

Publié : mar. 04/juin/2013 16:49
par Fig
Merci beaucoup Dobro. :D (39 minutes pour que le serveur soit à nouveau accessible?)

Je m'en sers surtout dans les formules.
Dans ce cas précis, je gère 4 numéros de sprite dans un seul long.

Je masque les octets qui ne m'intessent pas et je décale pour que ça me donne le numéro de sprite.
Pour tout dire, les 4 sprites sont les sprites qui me permettent les transitions (au 4 cotés) de textures sur des tiles isométrics.

Bref, je vais utiliser l'assembleur en ligne du coup, mais c'est domage que Pb ne permette pas de rotation sur 64 bts en natif.