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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message 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... :?
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

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

Message 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
Avatar de l’utilisateur
Fig
Messages : 1176
Inscription : jeu. 14/oct./2004 19:48

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

Message 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.
Il y a deux méthodes pour écrire des programmes sans erreurs. Mais il n’y a que la troisième qui marche.
Version de PB : 6.00LTS - 64 bits
Répondre