Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » Bool sous TIGCC ? (16 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
Invité Ecrit le: Mardi 25 octobre 2005 à 18:00 Déconnecté(e)    
 
Y a-t-il moyen d'avoir le type bool avec TIGCC ? Je ne l'ai trouvé nulle part et jusque là j'utilise des unsigned char avec pour valeur 1 ou 0. Mais ça me prend beaucoup trop de place.

Merci. :)
    
./Post n°1   Marquer comme non lu.
Link Ecrit le: Mardi 25 octobre 2005 à 19:02 Déconnecté(e)    Voir le profil de Link Envoyer un email à Link Visiter le site WEB de Link Envoyer un message privé à Link  

ben, t'auras pas plus petit qu'un unsigned char, à mon avis... Même le type bool, je ne crois pas que bcp de compilateurs le stocke sur un seul bit... (généralement, tu peux passer l'adresse d'un bool, donc...)
    
./Post n°2   Marquer comme non lu.
Jfg Ecrit le: Mardi 25 octobre 2005 à 19:57 Déconnecté(e)    Voir le profil de Jfg Envoyer un email à Jfg Visiter le site WEB de Jfg Envoyer un message privé à Jfg  


en gros, le type bool ne sert à rien en C.
Kill Mario
    
./Post n°3   Marquer comme non lu.
Invité Ecrit le: Mardi 25 octobre 2005 à 20:26 Déconnecté(e)    
 
Ben moi il me servirait à ne pas utiliser 8 bits pour une variable qui en a besoin de 1.
    
./Post n°4   Marquer comme non lu.
Invité Ecrit le: Mardi 25 octobre 2005 à 20:27 Déconnecté(e)    
 
Il n'y a pas d'alternative en assembleur ?
    
./Post n°5   Marquer comme non lu.
LionelA Ecrit le: Mardi 25 octobre 2005 à 20:36 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


non plus, et puis on est pas a 7 bits près :)
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°6   Marquer comme non lu.
RHJPP Ecrit le: Mardi 25 octobre 2005 à 20:43 Déconnecté(e)    Voir le profil de RHJPP Envoyer un email à RHJPP Envoyer un message privé à RHJPP  


Tu peux aussi stocker plusieurs boolean sur un unsigned char...
    
./Post n°7   Marquer comme non lu.
Invité Ecrit le: Mardi 25 octobre 2005 à 20:45 Déconnecté(e)    
 
Mais en fait j'ai besoin d'utiliser 13 variables de type booléen dans une structure. A chaque fois que je définis une variable à l'aide de cette structure je pourrais faire un gain de 13*8-13 = 91 bits, soit presque 12 octets.
Je déclare 10 variables et j'ai perdu 120 octets alors que j'aurais pu en perdre environ 16. C'est énorme.
    
./Post n°8   Marquer comme non lu.
Invité Ecrit le: Mardi 25 octobre 2005 à 20:46 Déconnecté(e)    
 
Ah non je vais plutôt faire un unsigned char qui lorsqu'il est converti en binaire me donne mes booléens. :)
    
./Post n°9   Marquer comme non lu.
Kevin Kofler Ecrit le: Mardi 25 octobre 2005 à 20:59 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Tu peux utiliser un bitfield:
struct foo {
_Bool flag1:1, flag2:1, flag3:1, ..., flag13:1;
};


_Bool est le type booléen dans TIGCC, mais pour l'avoir vraiment sur 1 bit, il faut utiliser les bitfields.

Malheureusement, cette méthode ne te permet que d'utiliser un nom différent pour chaque flag, tu ne peux pas faire un tableau d'un type bitfield (par exemple _Bool flags:1[13] ou _Bool flags[13]:1 ne marchent pas!).
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°10   Marquer comme non lu.
Invité Ecrit le: Mardi 25 octobre 2005 à 21:03 Déconnecté(e)    
 
Mais si j'utilise un champ de bits je dois le déclarer dans ma structure, donc ça me fait une sous-structure. C'est possible ?
    
./Post n°11   Marquer comme non lu.
Invité Ecrit le: Mardi 25 octobre 2005 à 21:10 Déconnecté(e)    
 
Ah non c'est bon tout est parfait. Merci. :)
    
./Post n°12   Marquer comme non lu.
Sasume Ecrit le: Mardi 25 octobre 2005 à 21:16 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Converti en binaire ? Concrêtement tu veux effectuer quelle opération pour convertir ?

Sinon, tu peux utiliser des champs de bits :
struct bits
{
  unsigned char bit7:1,bit6:1,bit5:1,bit4:1,bit3:1,bit2:1,bit1:1,bit0:1;
};

struct bits variable;
variable.bit6 = 1;


Mais le problème est qu'on ne peut pas considérer une variable de type struct bits comme un tableau (au sens C) de bits.
Pour pallier à cette solution, tu peux simplement extraire à la main les bits de tes données...
Je pense que c'est ce à quoi tu faisais référence dans ton post ./8, mais c'était extrêmement mal dit, ça laissait penser que tu n'avais absolument pas compris comment les données sont stockées en mémoire...
Bref, voici le code :
// bitarray.h :
typedef unsigned char bool;
bool getBit(unsigned char array[],unsigned short n);
void setBit(unsigned char array[],unsigned short n,bool value);

// bitarray.c :
bool getBit(unsigned char array[],unsigned short n)
{
  unsigned short i = n / 8;
  unsigned short bit = n % 8;
  return (array[i] & (0x80>>bit));
}

void setBit(unsigned char array[],unsigned short n,bool value)
{
  unsigned short i = n / 8;
  unsigned short bit = n % 8;
  if(value)
    array[i] |= (0x80>>bit);
  else
    array[i] &= ~(0x80>>bit);
}

// Dans le .c qui souhaite manipuler un tableau de bits :
#include "getbit.h"

void foo(void)
{
  unsigned char array[10];

  short i;
  for(i = 0 ; i < 10 * 8 ; i++)
    setBit(array,i,true);

  for(i = 0 ; i < 10 * 8 ; i++)
    printf("bit n°%d=%d",i,getBit(array,i));
}


On peut faire mieux directement en ASM, grâce à certaines instructions (btst, bset et bclr).

Sinon, pour info, la norme du C++ indique que le type bool doit occuper au moins un octet.
    
./Post n°13   Marquer comme non lu.
Invité Ecrit le: Mardi 25 octobre 2005 à 22:11 Déconnecté(e)    
 
Ouh là. Là je peux pas trouver mieux. Merci c'est exactement ce que je cherchais.
En fait j'ai 12 variables de "type bool" car la treizième est une chaîne de caractères.
    
./Post n°14   Marquer comme non lu.
Sasume Ecrit le: Mardi 25 octobre 2005 à 22:13 Déconnecté(e)    Voir le profil de Sasume Envoyer un email à Sasume Visiter le site WEB de Sasume Envoyer un message privé à Sasume  

Dans ce cas, c'est complètement stupide d'utiliser mes fonctions car elle te feront perdre de la place. Le code des fonctions doit prendre environ une trenteine d'octets.
-Edité le Mardi 25 octobre 2005 à 22:13 par sasume-
    
./Post n°15   Marquer comme non lu.
geogeo Ecrit le: Mercredi 26 octobre 2005 à 13:37 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Toute façon le type bool est juste la pour améliorer la lisibilité du code rien de plus.
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°16   Marquer comme non lu.
Folco Ecrit le: Jeudi 27 octobre 2005 à 13:39 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


AS :
Il n'y a pas d'alternative en assembleur ?

en assembleur, c'est simplissime, tu peux enregistrer ça dans des octets où tu veux, et lire/modifier directement le bit qui va bien en une seule instruction.
Mais c'est une manière de faire, il n'y a aucun type qui soit en assembleur :D
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
  :: Index » Forum Ti68K » Programmation C » Bool sous TIGCC ? (16 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 53.62ms avec 26 requetes