Bonjour,
Qu'est-ce qui prend le plus d'octets : une variable char ou une variable short ?
J'utilise MinGW sur WinXP (je sais c'est pas bien ).
Merci d'avance.
Bonjour,
Qu'est-ce qui prend le plus d'octets : une variable char ou une variable short ?
J'utilise MinGW sur WinXP (je sais c'est pas bien ).
Merci d'avance.
"le Standard C++ garantit la relation suivante : 1 == sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)."
http://fr.cppreference.com/w/cpp/language/types
Ce qui est pas bien c'est de pas savoir se servir de google et de vouloir programmer pour un compilateur particulier
Plus précisément, un char utilise un octet (au sens mot machine, sur architecture x86-64: 8 bits) et un short 2 octets (toujours au sens mot machine, 16 bits sur x86-64).
Le gourou dicte la ligne (de commande) à suivre ...
Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
ainsi que le Cour sur la ligne de commande et des scripts
Bonjour
Ce qui n'est pas bien c'est surtout de ne pas chercher un minimum par soi-même plutôt que de venir sur le premier forum venu poser sa question à 2 balles qui aurait eu sa réponse en une seule ligne de code. Il ne t'est même pas venu à l'idée de faire un char x; short y; printf("%d/%d\n", sizeof(x), sizeof(y)) ???
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
C'est très bien MinGW ; XP c'est moins bien mais pas trop non plus. J'espère que c'est ça que tu voulais dire
Ce qui n'est pas bien, c'est que tu n'aies pas trouvé tout seul. Soit en faisant un code pour tester (peut-être que tu ne savais pas comment faire, maintenant tu sais !), soit en allant sur Google.
De mémoire, la norme C garantit que un char tient sur un byte et qu'un short tient sur au moins deux. Et non sur exactement 2 bytes comme le dit InitSreen, même si c'est quasiment toujours le cas sur une architecture 32 bits et sur PC en particulier. "L'équation" donnée par stendhal666 est valable aussi en C.
De manière plus général, tu devrais utiliser des int si tu n'as pas de contraintes de tailles et c'est généralement le cas sur PC. Les int sont normalement de la taille naturelle du processeur et donc plus rapides.
On écrit "J'ai tort" ; "tord" est la conjugaison du verbre "tordre" à la 3ème personne de l'indicatif présent
Ils servent à t'aider à trouver des solutions aux problèmes qui ne sont pas dans les livres. Tu aurais lu ne serait-ce qu'un seul livre de C déjà tu connaitrais la taille de tes types et tu connaitrais l'opérateur sizeof qui permet de récupérer cette taille dans un code pour l'utiliser. Et tu n'aurais alors pas été à la ramasse.
Bref ils ne sont certainement pas là pour pallier à ta fainéantise...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
On recommence avec les approximations...
La norme indique plusieurs choses:
Tout type est constitué d'un nombre entier de "byte", dont la taille en bits est indiqué par une constante (CHAR_BIT).
la taille du type char est précisément un byte.
les types sont ordonnés par leurs tailles:
sizeof(char) <= sizeof(short) (entre autre)
Et surtout, les types sont définis par une plage de valeur qu'ils doivent être capable de représenter, mais ils peuvent faire plus.
ainsi, un char doit pouvoir représenter les valeurs entre 0 et 127 (inclus), un signed char entre -128 et 127 et un unsigned char entre 0 et 255.
Un short est défini par un intervalle nécessitant 16 bits.
Mais sur certains systèmes (rare, certes), le byte fait 16, 32 voire 64 bits, et du coup, tous les types sont de grande taille.
Le cas extrème étant un système où le char fait 64bits, et tous les types ont pour taille 1 (sizeof).
Auquel cas, un char et un long long font la même taille en mémoire.
Concrètement, ca veut juste dire que le char n'est jamais plus grand que le short, mais que tu ne peux ni ne dois faire confiance aux limites des types.
Tu sais aussi que chaque variable commence sur son propre byte.
la page types arithmétiques de la partie C de cppreference.com te donneras pleins de détails.
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
Il ne faut pas en vouloir à Sve@r, il réagit toujours très vite quand il voit que la personne n'a pas cherché. Avec le temps tu t'y habitueras et tu verras qu'il t'engueule mais te fait toujours une réponse détaillée
Poster dans la section "débuter" ne t'empêche pas de chercher. Ce n'est pas qu'on veut pas répondre (la preuve, on le fait quand même), mais qu'on sait que t'apporter une réponse directe n'est souvent pas une vraie aide. Cela ne te fera pas progresser. Ici, les gens aiment bien que tu montres que tu as fait quelques recherches ou quelques tests avant de poser ta question. Certains forums fonctionnent comme des FAQ, tu poses une question simple, tu as une réponse directe ; ici, c'est plus une aide à ta réflexion personnelle. Bref, tu verras avec le temps comment cela fonctionne et même si on n'est pas toujours tendres, on finit toujours par aider les gens volontaires pour progresser.
bien dit leternel (vive l'architecture alpha, dommage qu'on puisse pas mettre plus de 16Mo de mémoire ).
après je vous trouve dur avec les néophytes, le but de developpez.com/net n'est t'il pas de partagé des connaissances? ou bien je me trompe et dans ce cas le but est de faire étalage de ces connaissances... parfois une réponse concise peu précise peut faire avancer le schmilblick puis dans un second temps un lien ou une réponse bien construite précise les choses. Merci leternel d'être le second temps.
Le gourou dicte la ligne (de commande) à suivre ...
Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
ainsi que le Cour sur la ligne de commande et des scripts
On est souvent durs avec les néophytes (je dis "on" sans forcément toujours m'inclure dedans) et des fois trop durs. Après, il faut être clair, il y a énormément de gens qui viennent posent des questions sans avoir fait la moindre recherche ou le moindre test, avec des descriptifs de problèmes plus que légers (genre "ça march pa"), et ne viennent jamais dire "merci" ou "ACK" aux réponses (theodorandaipieds ne semble pas tomber dans cette catégorie car il a répondu et c'est bien.). En général, je ne réponds pas à ces gens là personnellement. En revanche, je suis toujours prêt à aider les gens montrant de l'intérêt pour leur problème et les réponses apportées.
Je ne juge pas si c'est bien ou mal, c'est juste comme ça que fonctionne le forum C de Developpez.com.
Il y a une chose qui est sure : réfléchir et faire réfléchir font beaucoup plus progresser que des questions / réponses pré-mâchées sans approfondissement. J'ai beaucoup progressé depuis que je suis sur Developpez.com et j'ai vu d'autres personnes ici suivre le même chemin.
@Bktero: c'est sûr que le débat élève quasiment toujours le niveau, après faut-il fustiger celui qui n'a pas trouvé sur google parmi des résultats que l'on comprend pas forcément lorsqu'on débute?
Le gourou dicte la ligne (de commande) à suivre ...
Penser à lire le Tutoriel Batch ou a consulter la FAQ Batch et ses contributions,
ainsi que le Cour sur la ligne de commande et des scripts
Tu viens de mettre en évidence le problème réel : où mettre le curseur ? Chacun se fera son choix
Non non, c'est bien de -128 (0x80) à 127 (0x7F) ce qui qui occupe bien les 256 valeurs de la plage.
Cet agaçant déséquilibre entre le négatif et le positif est dû au 0 qui occupe une position dans la plage dévolue aux positifs...
Faut quand-même pas exagérer non plus. Il y a un code détaillé en seconde position (la première étant le langage C sur wikipedia)...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
La norme impose la plage -127 à 127 :
Sur la plupart des implémentations (qui font du complément à 2), la plage est effectivement -128 à 127 mais ce n'est pas garanti.— minimum value for an object of type signed char
SCHAR_MIN -127 // − (2
7 − 1)
— maximum value for an object of type signed char
SCHAR_MAX +127 // 2
7 − 1
Par contre tu en as la garantie sur le type int8_t (qui est obligatoirement 8 bits et complément à 2) mais dont la présence est optionnelle.
La représentation des nombres signés peut se faire en "complément à 2" où tu as effectivement une déséquilibre entre la plage positive et négative, mais également en "complément à 1" ou en "signe + valeur" où ce déséquilibre n'existe pas (mais où il y a deux façons de représenter 0).
En pratique, l'immense majorité des implémentations travaillent en "complément à 2" mais là encore rien de garanti par la norme.
Cette constante est "implementation defined", elle donne accès dans le code à une des limites concrètes.
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager