Un bit comme type de variable ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Un bit comme type de variable ?

Message par Octavius »

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 ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Un bit comme type de variable ?

Message par Backup »

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 ?
byte en anglais signifie octet en français !! :D

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 :D)
il faut ajouter & 255 a ta variable !!

tu as donc 256 valeur possible avec un octet ! :D
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 :D
2 drapeaux mis a 1 d'un coup !!

rien n'empeche par la suite de lire les bits de façon individuel !! :D

ex

Code : Tout sélectionner

a.b& 255=3
Resultat$ = Bin(a.b)
Debug  Resultat$

on a bien les 2 derniers bits a 1 !! :D

avec un seul octets , 8 information binaire sauvé d'un coup !! :D
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

PureBasic génère des EXE tout petit.
Dans un jeux ce seront surement les sprite et les sons qui prendront de la place.
brossden
Messages : 821
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

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" :o

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
Fanator
Messages : 20
Inscription : jeu. 19/avr./2007 8:14

Message par Fanator »

Bonjour à tous.
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
Octavius
Messages : 312
Inscription : jeu. 26/juil./2007 12:10

Message par Octavius »

Ok merci pour les infos les gars, ça sert à rien que je me prenne la tête avec les bits en fait!

Pour ton problème Fanator je ne peux pas t'aider.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

@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

Code : Tout sélectionner

Debug "Octet n° " + Str(i) + " = 0 : Problème !
, le programme n'y est jamais allé ! :D
brossden
Messages : 821
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Dobro,la version 4.10 est OK !


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)
Le premier bit passe à la trappe !!!

:lol:
Denis

Bonne Jounée à tous
Fanator
Messages : 20
Inscription : jeu. 19/avr./2007 8:14

Message par Fanator »

@Dobro : j'ai effectivement la version 4.02 de PB, je n'ai plus qu'à télécharger la version 4.10 beta 2
Merci pour la réponse :D


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

Message par Backup »

brossden a écrit :Dobro,la version 4.10 est OK !
je n'en doute pas , c'est celle que j'ai :D
justement je me doutais d'un truc dans le genre ! :D
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Je remarque que je ne suis pas le seul à avoir eu la remarque bien urbaine de Dobro:

"T'as quelle version ? Parce que moi en 4.10 ça marche !"

Au passage merci Dobro, qu'est-ce qu'on est bien en 4.10. :D
Répondre