Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » taille d'un booleen
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

taille d'un booleen

Posté le 17/09/2012 18:29

dans mon programme du concours ,ecrit en c++,il y a deux fichiers de sauvegarde : un de booleens et un de char.
Quelle est la taille d'un booleen pour les fichiers de sauvegarde?
Et est-il utile de faire deux fichiers de sauvegarde pour economiser la memoire?

EDIT : en fait ,c'est surtout la deuxieme question qui me taraude... combien de memoire prend un fichier a la base?


Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 17/09/2012 18:33 | #


normalement, (je ne maîtrise pas le C++) un booléen est écrit sur 1 bit
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 17/09/2012 18:35 | #


un octet est égal a combien de bit? (ne vous inquiété pas, j'irai me flagellé sur la place publique)
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Totoyo Hors ligne Membre d'honneur Points: 16093 Défis: 102 Message
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 17/09/2012 18:41 | #


ok merci. et quelle place prend un fichier de sauvegarde vide?
PS: WTF is that smiley
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 17/09/2012 18:49 | #


Dodormeur a écrit :
(ne vous inquiété pas, j'irai me flagellé sur la place publique)


Ben quoi ?
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 17/09/2012 21:25 | #


C'est simple :
-un bit = 0 ou 1 (2 possibilités)
-huit bits = un octet = un nombre compris entre 00000000 et 11111111 (256 possibilités)

Après tout en découle.

Au pire tu fais sizeof(bool).
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 17/09/2012 21:29 | #


Euh non pour moi, la taille minimale de n'importe quelle variable est de un octet(=1byte=8bits). Ce qui fait que un booléen "pèse" autant qu'un char(qui lui vaut aussi un octet)
Quelle est la taille d'un booleen pour les fichiers de sauvegarde?

Ca change pas si tu lui donne un bool ca vaudra aussi un octet

Et est-il utile de faire deux fichiers de sauvegarde pour economiser la memoire?

Bah d'après ce que je viens de dire, si je me trompe pas les deux pèsent autant donc après tu lui donne un tableau de char et tu met 1 ou 0 et ca te fait un booléen. En plus ca va te prendre plus de temps a écrire les deux fichier et a les lire vu qu'il y en a 2. Après tu peut réfléchir, pour vraiment économiser la place, tu peut essayer de stocker plusieurs booléen en un char puisque tu a 256 (en unsigned) possiblité. Par exemple :
- 0 : toutes les option sont fausse
- 1 : option 1 est vrai option 2 est fausse
- 2 : option 1 est vrai option 2 est vrai
- 3 : option 1 et 2 sont vrai
Enfin t'a compris, normalement on devrait même pouvoir faire mieux je crois en utilisant directement les bit(ca permettrait donc de stocker 8 bool en un char), mais je sais pas faire

combien de memoire prend un fichier a la base?

Aucune idée, ca doit dépendre du systeme de fichier de la calculatrice et je n'ai jamais vraiment rechercher.

Par contre, je suis pas sur de ce que j'avance mais bon j'ai de grande raisons de le croire
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 17/09/2012 21:30 | #


ben oui , mais est-ce la peine de faire deux fichiers de sauvegarde (1 de 10 char et 1 de 10 bool ?) ou est-ce que cela prendra plus de place?

PS @ louloux : sizeof (bool) me renvoye 4, alors que sizeof (char ) me renvoye... 1 !
a mon avis, sizeof renvoye sur le nombre d'octet...

EDIT : deso ziqumu ,j'avais pas vu ton message...
je vais finalement faire un seul fichier de sauvegarde, de toute facon je n'ai pas trop a stocker... (et j'en perdrais en taille de code donc finalement cela serai plus lourd...)
Un grand merci en tout cas pour ces reponses et pour cette flagelation
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 17/09/2012 21:32 | #


Ziqumu a écrit :
pour moi, la taille minimale de n'importe quelle variable est de un octet(=1byte=8bits). Ce qui fait que un booléen "pèse" autant qu'un char(qui lui vaut aussi un octet)
Vrai.

Dodormeur a écrit :
et quelle place prend un fichier de sauvegarde vide?
La taille d'un fichier est égale au nombre d'octets utilisés + 1.
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 18/09/2012 01:04 | #


2 fichiers de sauvegarde pour gagner de la place ?
Je vois pas bien en quoi ça pourrait gagner de la place. Si tu casses un truc en deux, l'ensemble n'est jamais moins volumineux.

Tes booléens, tu les stockes dans un entier et c'est vite fait, comme avec un système de flags :
#define FLAG1 0x00000001
#define FLAG2 0x00000002
#define FLAG3 0x00000004
#define FLAG4 0x00000008
#define FLAG5 0x00000010
...
#define FLAG10 0x00000200

int flags=0;

// écrire dans l'entier
if( bool1 ) flags |= FLAG1;

//lire dans l'entier
if( flags & FLAG1 ) bool1 = true;

Après, si tu utilises plutôt un tableau de booléens, c'est encore plus simple, même pas besoin de déclarer des constantes :
//écriture
for(int i=0 ; i<10 ; i++) flags |= boolArray[ i ]<<i;

//lecture :
for(int i=0 ; i<10 ; i++) boolArray[ i ] = flags & (1<<i);


Pour revenir au sizeof(bool), sur la plupart des systèmes ça vaut 1, l'octet étant la plus petite unité adressable. Avec le SDK effectivement ça vaut 4, un peu surprenant, mais après tout pour un tableau de 10 variable, ça n'a aucune importance.
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 18/09/2012 19:14 | #


4 octets ? WTF ?
Ils mettent quoi dedans ?
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 18/09/2012 19:54 | #


C'est vrai que c'est bizare, c'est peut être un bug de sizeof.. Si c'est pas un bug, autant stoquer le booléen dans un char c'est plus rentable.
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 18/09/2012 20:30 | #


Non, il est préférable de privilégier la sémantique dans le code. Si ta variable est un booléen, il faut utiliser le type bool. Si tu utilises un entier qui représente une quantité, il faut utiliser int, même si ton entier ne dépassera jamais 10 et qu'il tiendrait dans un char. Un char, c'est un caractère, ou une donnée non-quantitative sur un octet.
Il est illogique de sacrifier la lisibilité du code pour 3 octets, je vous rappelle que la puce RAM fait 512ko.
De plus, dans la plupart des cas votre variable ne sera jamais stockée en RAM, elle restera dans un registre pendant toute sa durée de vie.

Evidemment, on peut déroger à cette règle lorsqu'on parle d'un tableau de milliers d'éléments.
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 18/09/2012 20:56 | #


Pourquoi utiliser un marteau-pilon pour casser une noisette ?
Le code est aussi lisible, que tu codes une map en char ou en int, sauf qu'une map en int coûte 512 octets, contre 128 pour une map en char.
Dark storm Hors ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 18/09/2012 23:20 | #


Je suis d'accord avec Louloux. Sur un ordi, je comprend parfaitement que l'on peut utiliser des int à tout va, il y a beaucoup de place.
Par contre, sur une calto, la mémoire est vite remplie si l'on utilise trop d'int. (mais bon, tout est relatif...)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 57 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd