Un bit comme type de variable ?
Un bit comme type de variable ?
Vu la taille des programmes que j'ai fait jusqu'à présent ça n'a jamais été vraiment important la place qu'occupait mes variables, mais je préfère y faire attention, surtout si je commence à faire des petits jeux en 2D. Bref, la plus petite variable que j'ai trouvé en PB c'est le byte, qui prend qd mm un octet en entier. Or il m'arrive assez souvent dans un programme d'utiliser des variables qui font office de oui/non, et un bit est donc bien suffisant. Est-il possible de n'allouer qu'un bit pour une variable ? Ou l'octet est-il le minimum ?
Re: Un bit comme type de variable ?
byte en anglais signifie octet en français !!Octavius a écrit : Bref, la plus petite variable que j'ai trouvé en PB c'est le byte, qui prend qd mm un octet en entier. Or il m'arrive assez souvent dans un programme d'utiliser des variables qui font office de oui/non, et un bit est donc bien suffisant. Est-il possible de n'allouer qu'un bit pour une variable ? Ou l'octet est-il le minimum ?

dans un octet tu a 8 bits !!
donc 8 information elementaire 0 ou 1
rien ne t' empeche donc d'utiliser un octet pour conserver 8 informations
elementaire !!
a savoir qu'en Purebasic les octets vont de -128 a +127
pour qu'un octet puisse aller de 0 a 255 (comme souvent connu

il faut ajouter & 255 a ta variable !!
tu as donc 256 valeur possible avec un octet !

chacune des valeurs correspond a une configuration de ces 8 petit drapeaux (0 ou 1)
ex :
000 = 0
001 = 1
010 = 2
011 = 3
ect ...
en mettant la valeur 3 dans une variable , cela reviens a mettre les 2 derniers bits a 1

2 drapeaux mis a 1 d'un coup !!
rien n'empeche par la suite de lire les bits de façon individuel !!

ex
Code : Tout sélectionner
a.b& 255=3
Resultat$ = Bin(a.b)
Debug Resultat$

avec un seul octets , 8 information binaire sauvé d'un coup !!

Octavius, j'ignore quel est la puissance de ta machine mais je t'assure que tu peux prendre autant d'octets que tu voudras pour faire tes programmes,je pense que seras fatigué d'écrire avant que celle-ci t'annonce "Work Space Full" 
De plus l'economie que tu penses réaliser en utilisant chaque bit d'un octet, va te necessiter plus d'octets de programmation pour arriver à traiter correctement tes données avec toutes les sources d'erreur que cela va engendrer.
Alors un bon tuyau, nous ne sommes plus en DOS, tu peux te faire plaisir en utilisant autant de variable que tu le désires !
Essaye d'imaginer quel travail d'ecriture tu vas avoir besoin pour utiliser 1 Mo de mémoire octet par octet (1 000 000 quand même !) ce qui de nos jour est devenu une petite unité !

De plus l'economie que tu penses réaliser en utilisant chaque bit d'un octet, va te necessiter plus d'octets de programmation pour arriver à traiter correctement tes données avec toutes les sources d'erreur que cela va engendrer.
Alors un bon tuyau, nous ne sommes plus en DOS, tu peux te faire plaisir en utilisant autant de variable que tu le désires !
Essaye d'imaginer quel travail d'ecriture tu vas avoir besoin pour utiliser 1 Mo de mémoire octet par octet (1 000 000 quand même !) ce qui de nos jour est devenu une petite unité !
Denis
Bonne Jounée à tous
Bonne Jounée à tous
Bonjour à tous.
J'ai un problème avec BinQ(). Le bit 32 est égal à 0 alors qu'il devrait être à 1. Voici le code :
J'ai un problème avec BinQ(). Le bit 32 est égal à 0 alors qu'il devrait être à 1. Voici le code :
Code : Tout sélectionner
a.q = %0000000000000000000000000000000000000000000000000000000000000001
a$ = RSet(BinQ(a),64,"0")
Debug a
Debug a$
chaine$ = ""
For k = 0 To 63
Select k
Case 0
b.q = a
b$ = RSet(BinQ(b),64,"0")
Debug "Ps" + Str(k) + "_" + b$
Debug StrQ(b)
chaine$ + Mid(b$,64-k,1)
Default
b.q = b << %1
b$ = RSet(BinQ(b),64,"0")
Debug "Ps" + Str(k) + "_" + b$
Debug StrQ(b)
chaine$ + Mid(b$,64-k,1)
EndSelect
Next k
i = 64: Debug Left(chaine$,i)
For i = 0 To 63
x = Val(Mid(chaine$,i+1,1))
If x=1
Debug "Octet n° " + Str(i) + " = 1"
Else
Debug "Octet n° " + Str(i) + " = 0 : Problème !"
EndIf
Next i
@Fanator : chez moi ça marche !!
a tu la version 4.10 de purebasic ?
ton programme met a 1 les differentes positions des 64 bit
a la fin tout est a 1
j'ai mis un breakpoint sur ton message, le programme n'y est jamais allé ! 
a tu la version 4.10 de purebasic ?
ton programme met a 1 les differentes positions des 64 bit
a la fin tout est a 1
j'ai mis un breakpoint sur ton message
Code : Tout sélectionner
Debug "Octet n° " + Str(i) + " = 0 : Problème !

Dobro,la version 4.10 est OK !
La version 4.02 a effectivement un bug dans le BinQ()
testez cela !
Le premier bit passe à la trappe !!!

La version 4.02 a effectivement un bug dans le BinQ()
testez cela !
Code : Tout sélectionner
Debug BinQ(Pow(2,32))
Debug Pow(2,32)

Denis
Bonne Jounée à tous
Bonne Jounée à tous