difference entre int et long

difference entre int et long - C - Programmation

Marsh Posté le 28-08-2009 à 10:57:55    

bonjour,
 
une question que je me suis toujours posée:
quel est la différence entre un type  int et un long ???
 :??:


---------------
De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent.
Reply

Marsh Posté le 28-08-2009 à 10:57:55   

Reply

Marsh Posté le 28-08-2009 à 11:09:54    

Vu que tu t'es toujours posée la question, t'as jamais pensé à chercher la réponse?  
 
http://www.google.com/search?hl=en [...] f&oq=&aqi=


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 28-08-2009 à 11:18:15    

sizeof(int) <= sizeof(long)
 
Le reste dépend de la plateforme.

Reply

Marsh Posté le 28-08-2009 à 12:26:39    

Taz question,
 
Le fait que sizeof(int) soit parfois égal à sizeof(long) dépend du compilateur ou de l'architecture ? Parce que j'ai lu des trucs qui disent que sur les CPU 32 bits, les 2 tailles sont pareilles, mais sauf erreur le DSP que j'ai utilisé cette année avait 2 tailles différentes pour les 2.


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 28-08-2009 à 13:03:02    

Et la norme n'aide pas beaucoup, elle dit juste que la taille minimum d'un int, c'est 4 bytes, et que la taille minimum d'un long, c'est 4 bytes aussi. :/

Message cité 1 fois
Message édité par Elmoricq le 28-08-2009 à 13:04:16
Reply

Marsh Posté le 28-08-2009 à 13:23:05    

Elmoricq a écrit :

Et la norme n'aide pas beaucoup, elle dit juste que la taille minimum d'un int, c'est 4 bytes, et que la taille minimum d'un long, c'est 4 bytes aussi. :/


 :non:

 

La norme C89 elle dit ça:

 
Code :
  1. #define INT_MAX                     +32767
  2. #define INT_MIN                     -32767
  3. #define LONG_MAX               +2147483647
  4. #define LONG_MIN               -2147483647


On peut en inférer qu'avec des bytes de 8 bits "int" fait au minimum 2 bytes (et non 4), et long 4. Mais ça reste une inférence.

 

Il est fréquent que sur les archis 32b INT_MAX soit défini à la même valeur que LONG_MAX (et idem pour les mins), mais c'est une caractéristique de l'implémentation, en ANSI C tu peux pas compter dessus (à noter que depuis le C a gagné "long long", et sur les archis 64b tu te retrouves avec long et long long qui sont identiques, et int qui reste sur l'ancien long [:pingouino])


Message édité par masklinn le 28-08-2009 à 13:27:50

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-08-2009 à 14:51:52    

sur les CPU embarqués 8b et 16b en général on prend 16b comme taille de int  :o

 

de toute façon l'idéal pour être sûr de la taille de ses variables quelque soit la plateforme ce sont les type C99:
uint8_t,uint16_t,uint32_t, int8_t... etc..

Message cité 1 fois
Message édité par sligor le 28-08-2009 à 14:53:55
Reply

Marsh Posté le 28-08-2009 à 15:05:10    

sligor a écrit :

sur les CPU embarqués 8b et 16b en général on prend 16b comme taille de int  :o  
 
de toute façon l'idéal pour être sûr de la taille de ses variables quelque soit la plateforme ce sont les type C99:
uint8_t,uint16_t,uint32_t, int8_t... etc..


Tu prends le types.h C89 et tu sais quelle taille font tes variables :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-08-2009 à 15:25:12    

oui mais ça change d'une plateforme à l'autre, je parlais pour la portabilité.
 
Aprés tu peux utiliser types.h pour créer tes propres types C99 like mais autant utiliser les normes c'est fait pour :o

Reply

Marsh Posté le 28-08-2009 à 15:42:03    

sligor a écrit :

oui mais ça change d'une plateforme à l'autre


Bah non, le types.h C89 il change pas d'une plateforme à l'autre, ce sont les types.h d'implés qui changent potentiellement. Si tu codes au standard, tu sais de quelle taille sont tes types: tu prends la range définie par le standard [:cosmoschtroumpf]

 

char 8 bits, int 16 bits, long 32 bits [:cosmoschtroumpf]


Message édité par masklinn le 28-08-2009 à 15:42:25

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-08-2009 à 15:42:03   

Reply

Marsh Posté le 29-08-2009 à 11:30:08    

esox_ch a écrit :

Le fait que sizeof(int) soit parfois égal à sizeof(long) dépend du compilateur ou de l'architecture ?


 
De l'ABI.  Les compilateurs respectent généralement une ABI plus ou moins bien spécifiée et la taille des types standards en fait partie.  L'ABI est conçue en fonction de l'architecture et de l'OS -- certains OS prennent même la peine d'en définir une ou plusieurs "standards".  L'exemple le plus visible de la variation est dans les ABI 64 bits:
- int et long sur 64 bit (rare sur des machines non spécialisées)
- int 32 bits et long 64 bits (Unix)
- int et long 32 bits (Windows)


---------------
The truth is rarely pure and never simple (Oscar Wilde)
Reply

Marsh Posté le 29-08-2009 à 11:39:38    

Merci :jap:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 29-08-2009 à 15:50:49    

Personnellement, quand je programme pour Windows, j'évite le int et le long, et j'utilise les types, prédéfinies dans windef.h et basetsd.h, que sont INT32, UINT32, INT64, UINT64, car ces types devraient être stables d'une machine à l'autre et d'une version de Windows à l'autre.

Reply

Marsh Posté le 29-08-2009 à 19:18:30    

Un Programmeur a écrit :


 
De l'ABI.  Les compilateurs respectent généralement une ABI plus ou moins bien spécifiée et la taille des types standards en fait partie.  L'ABI est conçue en fonction de l'architecture et de l'OS -- certains OS prennent même la peine d'en définir une ou plusieurs "standards".  L'exemple le plus visible de la variation est dans les ABI 64 bits:
- int et long sur 64 bit (rare sur des machines non spécialisées)
- int 32 bits et long 64 bits (Unix)
- int et long 32 bits (Windows)


 
D'où le terme plateforme: architecture + compilateur.
 
http://en.wikipedia.org/wiki/64-bit#64-bit_data_models

Reply

Marsh Posté le 29-08-2009 à 21:25:10    

billgatesanonym a écrit :

Personnellement, quand je programme pour Windows, j'évite le int et le long, et j'utilise les types, prédéfinies dans windef.h et basetsd.h, que sont INT32, UINT32, INT64, UINT64, car ces types devraient être stables d'une machine à l'autre et d'une version de Windows à l'autre.


 [:vomi]

Reply

Marsh Posté le 29-08-2009 à 21:56:09    

+1
 
j'ai une autre façon de voir les choses, on en pense ce qu'on veut : j'itère par exemple mes boucles avec des int, je stocke mes indices avec des int, avec le principe que si, sur ma plateforme, int est trop petit pour être un indice (par exemple int 16 bits et indice = 70000), alors cette plateforme n'est pas capable d'acueillir mon programme. Le jour ou vous avez + d'entrées dans un tableau que peut en supporter un registre d'indice, c'est qu'il faut changer d'archi.

Reply

Marsh Posté le 30-08-2009 à 13:10:58    

jesus_christ a écrit :

+1
 
j'ai une autre façon de voir les choses, on en pense ce qu'on veut : j'itère par exemple mes boucles avec des int, je stocke mes indices avec des int, avec le principe que si, sur ma plateforme, int est trop petit pour être un indice (par exemple int 16 bits et indice = 70000), alors cette plateforme n'est pas capable d'acueillir mon programme. Le jour ou vous avez + d'entrées dans un tableau que peut en supporter un registre d'indice, c'est qu'il faut changer d'archi.


 
Il me semble qu'il y a le type "size_t" fait pour les indices des tableaux...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 30-08-2009 à 13:20:42    

Sve@r a écrit :

Il me semble qu'il y a le type "size_t" fait pour les indices des tableaux...


size_t c'est pour les tailles d'objets en général (ce que renvoie sizeof)

 

Mais oui, cette garantie fait que c'est un bon type pour les indices de tableaux.

 

http://bytes.com/topic/c/answers/2 [...] post816012


Message édité par masklinn le 30-08-2009 à 13:23:22

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed