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

  FORUM HardWare.fr
  Programmation
  C

  difference entre int et long

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

difference entre int et long

n°1919180
ProGrammeH​eure
Posté le 28-08-2009 à 10:57:55  profilanswer
 

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.
mood
Publicité
Posté le 28-08-2009 à 10:57:55  profilanswer
 

n°1919196
esox_ch
Posté le 28-08-2009 à 11:09:54  profilanswer
 

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
n°1919202
Taz
bisounours-codeur
Posté le 28-08-2009 à 11:18:15  profilanswer
 

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

n°1919242
esox_ch
Posté le 28-08-2009 à 12:26:39  profilanswer
 

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
n°1919256
Elmoricq
Modérateur
Posté le 28-08-2009 à 13:03:02  profilanswer
 

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
n°1919258
masklinn
í dag viðrar vel til loftárása
Posté le 28-08-2009 à 13:23:05  profilanswer
 

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
n°1919281
sligor
Posté le 28-08-2009 à 14:51:52  profilanswer
 

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
n°1919285
masklinn
í dag viðrar vel til loftárása
Posté le 28-08-2009 à 15:05:10  profilanswer
 

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
n°1919288
sligor
Posté le 28-08-2009 à 15:25:12  profilanswer
 

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

n°1919291
masklinn
í dag viðrar vel til loftárása
Posté le 28-08-2009 à 15:42:03  profilanswer
 

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
mood
Publicité
Posté le 28-08-2009 à 15:42:03  profilanswer
 

n°1919547
Un Program​meur
Posté le 29-08-2009 à 11:30:08  profilanswer
 

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)
n°1919551
esox_ch
Posté le 29-08-2009 à 11:39:38  profilanswer
 

Merci :jap:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°1919582
billgatesa​nonym
Posté le 29-08-2009 à 15:50:49  profilanswer
 

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.

n°1919617
Taz
bisounours-codeur
Posté le 29-08-2009 à 19:18:30  profilanswer
 

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

n°1919620
sligor
Posté le 29-08-2009 à 21:25:10  profilanswer
 

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]

n°1919623
jesus_chri​st
votre nouveau dieu
Posté le 29-08-2009 à 21:56:09  profilanswer
 

+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.

n°1919655
Sve@r
Posté le 30-08-2009 à 13:10:58  profilanswer
 

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.
n°1919659
masklinn
í dag viðrar vel til loftárása
Posté le 30-08-2009 à 13:20:42  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  difference entre int et long

 

Sujets relatifs
[C/C++] Difference entre pointeur et double pointeur ?Casting byte[] vers int[] ou long[]
Différence IE / Firefoxdifférence entre un ERP et un PGI?...
Calcul de difference entre 2 dates dans 1 fichier 'Batch'Formatter un Long en un String lisible
Différence entre pointeur et tableau, allocation dynamique et statiqueDifference Flex vs Flex Builder
[SQL] SQL Server 2000 & la différence (not exists)[VBA] Remplissage de cellules très long en temps
Plus de sujets relatifs à : difference entre int et long


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR