Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3624 connectés 

 


Dernière réponse
Sujet : [C sous Unix] != entre short int, int, et long int !!!
Combi_A_Vendre

letoII a écrit a écrit :

 
 
Qu'est ce que tu entend par interprété différament?




 
J'ai eu le problème sous Unix avec GCC et un compilateur Unix dont je ne souviens plus le nom.
Le but était de faire passer un buffer par une liaison série SPI entre processeurs motorola.
Pour un processeur j'utilisais GCC et pour l'autre processeur un autre personne utilisait un autre compilo.
 
La même définition du suivant donnait des mappings mémoires différents selon le compilateur.  
typedef struct
{
    ulong toto1:2;
    ulong toto2:5;
    ...
}
 
En informatique industrielle beaucoup de personnes évitent les champs de bits pour cette raison.
 
vw


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
Combi_A_Vendre

letoII a écrit a écrit :

 
 
Qu'est ce que tu entend par interprété différament?




 
J'ai eu le problème sous Unix avec GCC et un compilateur Unix dont je ne souviens plus le nom.
Le but était de faire passer un buffer par une liaison série SPI entre processeurs motorola.
Pour un processeur j'utilisais GCC et pour l'autre processeur un autre personne utilisait un autre compilo.
 
La même définition du suivant donnait des mappings mémoires différents selon le compilateur.  
typedef struct
{
    ulong toto1:2;
    ulong toto2:5;
    ...
}
 
En informatique industrielle beaucoup de personnes évitent les champs de bits pour cette raison.
 
vw

LetoII

Combi_A_Vendre a écrit a écrit :

 
 
Les champs de bits peuvent etre interprétés différement selon le compilo, c'est donc à déconseillé pour le multiplateforme, multi os ou multo compilo.
 
vw




 
Qu'est ce que tu entend par interprété différament?

Combi_A_Vendre

letoII a écrit a écrit :

Et puis ça se désactive l'alignement des données.




 
Pour l'alignement des données, vous pouvez utiliser la directive pragma packed pour choisir l'alignement au bit prés dans une structure.
 
vw

Combi_A_Vendre

letoII a écrit a écrit :

De toute manière si tu veux un truc précis d'un point de vue taille fait un champ de bit, là au moin... :D




 
Les champs de bits peuvent etre interprétés différement selon le compilo, c'est donc à déconseillé pour le multiplateforme, multi os ou multo compilo.
 
vw

LetoII Et puis ça se désactive l'alignement des données.
LetoII

antp a écrit a écrit :

encore que, tu n'es pas sûr de l'espace mémoire qu'il occupera, vu que c'est arrondi à la taille supérieur qui plaît le plus au compilo :)




 
Ouai, mais t sûr d'avoir au minimum la taille que tu veux.

antp encore que, tu n'es pas sûr de l'espace mémoire qu'il occupera, vu que c'est arrondi à la taille supérieur qui plaît le plus au compilo :)
LetoII De toute manière si tu veux un truc précis d'un point de vue taille fait un champ de bit, là au moin... :D
antp

Combi_A_Vendre a écrit a écrit :

 
 
même pas, car le long c'est 4 octets, donc sur une machine 16 bits, un int est plus petit qu'un long.




 
bah oui ça confirme ce que j'ai dit :p

antp

youdontcare a écrit a écrit :

Bah si !
 
<= : inférieur ou égal ...




 
ouais on va devoir les renvoyer à l'école primaire :D

LetoII

youdontcare a écrit a écrit :

http://ccrma-www.stanford.edu/~jos [...] mbers.html
 
Byte sizes of GNU C/C++ data types for 64-bit architectures
Type Bytes  
short  2  
int  4  
long  8 (4 bytes on 32-bit machines)  
long long  8 (may become 16 bytes)  
 




 
Bon ok, mes infos retardaient un peu :D  :jap:

youdontcare http://ccrma-www.stanford.edu/~jos [...] mbers.html
 
Byte sizes of GNU C/C++ data types for 64-bit architectures
Type Bytes  
short  2  
int  4  
long  8 (4 bytes on 32-bit machines)  
long long  8 (may become 16 bytes)  
LetoII

Combi_A_Vendre a écrit a écrit :

 
 
Et sur une machine 64 bits ? :)




 
ben le int est entre 16 et 32 bits quand même.
 
Il me semble que des entier sur 64 bits existent maintenent mais je sais pas si c standard.

youdontcare

Combi_A_Vendre a écrit a écrit :

Et sur une machine 64 bits ? :)


<= a le même comportement sur une machine 8, 16, 32 ou 64 bits :)

trueslash :ange: sizeof()  :ange:
Combi_A_Vendre

youdontcare a écrit a écrit :

Bah si !
 
<= : inférieur ou égal ...




 
Et sur une machine 64 bits ? :)

youdontcare

juju_le_barbare a écrit a écrit :

Bah nan !


Bah si !
 
<= : inférieur ou égal ...

juju_le_barbare

antp a écrit a écrit :

short <= int <= long
c'est la seule chose qui est sûre :D
 




 
Bah nan !
 
sur une architecture 16 bits, (short = int) < long
et sur une 32 bits : short < (int = long)
 
Mais je vois pas l'intérêt de ce type de variable ...
 
 :)

Combi_A_Vendre

antp a écrit a écrit :

short <= int <= long
c'est la seule chose qui est sûre :D
 




 
même pas, car le long c'est 4 octets, donc sur une machine 16 bits, un int est plus petit qu'un long.

Combi_A_Vendre char : 1 octet
short : 2 octets
long : 4 octets
 
int et double : dépends de la machine
 
Le type int est facile à adresser directement par le pc car il est directement adressable, pour les types plus petit, je pense qu'il y a des manips à faire en plus (décalage et masquage) par le pc.
 
Donc pour les développements de brutes le int est pratique.
 
Arrêtez moi si je dis des conneries
 
vw
antp short <= int <= long
c'est la seule chose qui est sûre :D
juju_le_barbare

246tNt a écrit a écrit :

int c 8 bit sur une arch 8bits, 16bits sur une arch 16bits, 32 sur une arch 32bits, ...
 




 
bah ça n'au aucun intérêt alors ???
Pourquoi ne pas utiliser des types fixes ???
 
Bizarres, faudrait m'éclairer d'avantage !
 
Merci en tk !

246tNt int c 8 bit sur une arch 8bits, 16bits sur une arch 16bits, 32 sur une arch 32bits, ...
juju_le_barbare Bonjour,
 
donc sous architecture Unix, quelle est la réelle différence entre short int, int, et long int.
Je sais que short int c'est du 16 bits et long int du 32 bits, mais dans ce cas int ???
 
De plus beaucoup de fonctions du C attendent en paramètre un int.
Puis-je leur fournir du short int ou du long int ???
 
Merci

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)