Il me semblait avoir lu sur ce NG que la taille
d'un char en C valait 1 (sans autre précision sur l'unité) et
que cette taille pouvait être 7, 8 ou plus bits.
J'ai téléchargé la norme ISO/IEC 9899:1999 du langage C
mais je n'ai rien trouvé sur cela.
Pour ceux qui auraient également la norme, pouvez-vous
me dire à quel paragraphe je peux trouver cette info ?
Merci d'avance.
Jean
Le 9/07/03 17:55, dans <3f0c3ae3$0$4623$, « Jean » <no_spam> a écrit :
Il me semblait avoir lu sur ce NG que la taille d'un char en C valait 1 (sans autre précision sur l'unité) et
Par définition sizeof(char) vaut 1 ($6.5.3.4 paragraphe 3), c'est la définition de l'unité de mesure de sizeof (§6.5.3.4 paragraphe 2). La norme dit que cette unité de mesure est appelée un "byte" (§3.6)
que cette taille pouvait être 7, 8 ou plus bits.
La taille est >= 8 car il faut pouvoir y caser -127 à +127 (§5.2.4.2.1).
J'ai téléchargé la norme ISO/IEC 9899:1999 du langage C mais je n'ai rien trouvé sur cela. Pour ceux qui auraient également la norme, pouvez-vous me dire à quel paragraphe je peux trouver cette info ?
-- Éric Lévénez -- <http://www.levenez.com> Unix is not only an OS, it's a way of life.
Le 9/07/03 17:55, dans <3f0c3ae3$0$4623$626a54ce@news.free.fr>, « Jean »
<no_spam> a écrit :
Il me semblait avoir lu sur ce NG que la taille
d'un char en C valait 1 (sans autre précision sur l'unité) et
Par définition sizeof(char) vaut 1 ($6.5.3.4 paragraphe 3), c'est la
définition de l'unité de mesure de sizeof (§6.5.3.4 paragraphe 2). La norme
dit que cette unité de mesure est appelée un "byte" (§3.6)
que cette taille pouvait être 7, 8 ou plus bits.
La taille est >= 8 car il faut pouvoir y caser -127 à +127 (§5.2.4.2.1).
J'ai téléchargé la norme ISO/IEC 9899:1999 du langage C
mais je n'ai rien trouvé sur cela.
Pour ceux qui auraient également la norme, pouvez-vous
me dire à quel paragraphe je peux trouver cette info ?
--
Éric Lévénez -- <http://www.levenez.com>
Unix is not only an OS, it's a way of life.
Le 9/07/03 17:55, dans <3f0c3ae3$0$4623$, « Jean » <no_spam> a écrit :
Il me semblait avoir lu sur ce NG que la taille d'un char en C valait 1 (sans autre précision sur l'unité) et
Par définition sizeof(char) vaut 1 ($6.5.3.4 paragraphe 3), c'est la définition de l'unité de mesure de sizeof (§6.5.3.4 paragraphe 2). La norme dit que cette unité de mesure est appelée un "byte" (§3.6)
que cette taille pouvait être 7, 8 ou plus bits.
La taille est >= 8 car il faut pouvoir y caser -127 à +127 (§5.2.4.2.1).
J'ai téléchargé la norme ISO/IEC 9899:1999 du langage C mais je n'ai rien trouvé sur cela. Pour ceux qui auraient également la norme, pouvez-vous me dire à quel paragraphe je peux trouver cette info ?
-- Éric Lévénez -- <http://www.levenez.com> Unix is not only an OS, it's a way of life.
Benoit Dejean
Le Wed, 09 Jul 2003 18:20:27 +0200, Nicolas Favre-Félix a écrit :
Il me semblait avoir lu sur ce NG que la taille d'un char en C valait 1 (sans autre précision sur l'unité)
La fonction sizeof(char) renvoie en effet 1. oui
L'unité est l'octet. non
un char est codé sur 1 octet, soit 8 bits. 1 octet fait bien huit bit. cela dit un char est codé sur CHAR_BIT qui
est
=8
Il en est de même pour un unsigned char, mais les bits sont interpretés différements. il me semble que le fait que tes char soit signé ou pas dépend de ton
système
-- "Ne perdez pas de vue qu'un programme rapide et incorrect est d'une utilité presque nulle." Ce qui est loin d'être incompatible avec la notion d'Art.
Le Wed, 09 Jul 2003 18:20:27 +0200, Nicolas Favre-Félix a écrit :
Il me semblait avoir lu sur ce NG que la taille d'un char en C valait 1
(sans autre précision sur l'unité)
La fonction sizeof(char) renvoie en effet 1.
oui
L'unité est l'octet.
non
un char est codé sur 1 octet, soit 8 bits.
1 octet fait bien huit bit. cela dit un char est codé sur CHAR_BIT qui
est
=8
Il en est de même pour un unsigned char, mais les bits sont
interpretés différements.
il me semble que le fait que tes char soit signé ou pas dépend de ton
système
--
"Ne perdez pas de vue qu'un programme rapide et incorrect est d'une utilité presque nulle."
Ce qui est loin d'être incompatible avec la notion d'Art.
Le Wed, 09 Jul 2003 18:20:27 +0200, Nicolas Favre-Félix a écrit :
Il me semblait avoir lu sur ce NG que la taille d'un char en C valait 1 (sans autre précision sur l'unité)
La fonction sizeof(char) renvoie en effet 1. oui
L'unité est l'octet. non
un char est codé sur 1 octet, soit 8 bits. 1 octet fait bien huit bit. cela dit un char est codé sur CHAR_BIT qui
est
=8
Il en est de même pour un unsigned char, mais les bits sont interpretés différements. il me semble que le fait que tes char soit signé ou pas dépend de ton
système
-- "Ne perdez pas de vue qu'un programme rapide et incorrect est d'une utilité presque nulle." Ce qui est loin d'être incompatible avec la notion d'Art.
Nicolas Favre-Félix
byte = octet en français
La taille est >= 8 car il faut pouvoir y caser -127 à +127 La taille est d'exactement 8 octets quel que soit le compilateur ou le
système. D'autre part, on peut y stocker des valeurs de -128 à +127 , soit 256 valeurs. Or 256 = 2^8. CQFD.
pour un unsigned char, les valeurs sont 0 à 255.
byte = octet en français
La taille est >= 8 car il faut pouvoir y caser -127 à +127
La taille est d'exactement 8 octets quel que soit le compilateur ou le
système. D'autre part, on peut y stocker des valeurs de -128 à +127 , soit
256 valeurs.
Or 256 = 2^8. CQFD.
La taille est >= 8 car il faut pouvoir y caser -127 à +127 La taille est d'exactement 8 octets quel que soit le compilateur ou le
système. D'autre part, on peut y stocker des valeurs de -128 à +127 , soit 256 valeurs. Or 256 = 2^8. CQFD.
pour un unsigned char, les valeurs sont 0 à 255.
Emmanuel Delahaye
In 'fr.comp.lang.c', "Jean" <no_spam> wrote:
Il me semblait avoir lu sur ce NG que la taille d'un char en C valait 1 (sans autre précision sur l'unité) et
Oui, 1 byte.
que cette taille pouvait être 7, 8 ou plus bits.
8 minimum.
J'ai téléchargé la norme ISO/IEC 9899:1999 du langage C mais je n'ai rien trouvé sur cela.
Tu ne nous crois pas? Tu as raison. Il faut tout vérifier.
définition de CHAR_BIT?
Pour ceux qui auraient également la norme, pouvez-vous me dire à quel paragraphe je peux trouver cette info ?
Je fouille la n869 (dernier draft C9x)
5.2.4.2 Numerical limits
1 A conforming implementation shall document all the limits specified in this subclause, which are specified in the headers <limits.h> and <float.h>. Additional limits are specified in <stdint.h>.
5.2.4.2.1 Sizes of integer types <limits.h> 1 The values given below shall be replaced by constant expressions suitable for use in #if preprocessing directives. Moreover, except for CHAR_BIT and MB_LEN_MAX, the following shall be replaced by expressions that have the same type as would an expression that is an object of the corresponding type converted according to the integer promotions. Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.
number of bits for smallest object that is not a bit-field (byte) CHAR_BIT 8
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', "Jean" <no_spam> wrote:
Il me semblait avoir lu sur ce NG que la taille
d'un char en C valait 1 (sans autre précision sur l'unité) et
Oui, 1 byte.
que cette taille pouvait être 7, 8 ou plus bits.
8 minimum.
J'ai téléchargé la norme ISO/IEC 9899:1999 du langage C
mais je n'ai rien trouvé sur cela.
Tu ne nous crois pas? Tu as raison. Il faut tout vérifier.
définition de CHAR_BIT?
Pour ceux qui auraient également la norme, pouvez-vous
me dire à quel paragraphe je peux trouver cette info ?
Je fouille la n869 (dernier draft C9x)
5.2.4.2 Numerical limits
1 A conforming implementation shall document all the limits specified in
this subclause, which are specified in the headers <limits.h> and
<float.h>. Additional limits are specified in <stdint.h>.
5.2.4.2.1 Sizes of integer types <limits.h>
1 The values given below shall be replaced by constant expressions
suitable for use in #if preprocessing directives. Moreover, except for
CHAR_BIT and MB_LEN_MAX, the following shall be replaced by expressions
that have the same type as would an expression that is an object of the
corresponding type converted according to the integer promotions. Their
implementation-defined values shall be equal or greater in magnitude
(absolute value) to those shown, with the same sign.
number of bits for smallest object that is not a bit-field (byte)
CHAR_BIT 8
--
-ed- emdelYOURBRA@noos.fr [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
Il me semblait avoir lu sur ce NG que la taille d'un char en C valait 1 (sans autre précision sur l'unité) et
Oui, 1 byte.
que cette taille pouvait être 7, 8 ou plus bits.
8 minimum.
J'ai téléchargé la norme ISO/IEC 9899:1999 du langage C mais je n'ai rien trouvé sur cela.
Tu ne nous crois pas? Tu as raison. Il faut tout vérifier.
définition de CHAR_BIT?
Pour ceux qui auraient également la norme, pouvez-vous me dire à quel paragraphe je peux trouver cette info ?
Je fouille la n869 (dernier draft C9x)
5.2.4.2 Numerical limits
1 A conforming implementation shall document all the limits specified in this subclause, which are specified in the headers <limits.h> and <float.h>. Additional limits are specified in <stdint.h>.
5.2.4.2.1 Sizes of integer types <limits.h> 1 The values given below shall be replaced by constant expressions suitable for use in #if preprocessing directives. Moreover, except for CHAR_BIT and MB_LEN_MAX, the following shall be replaced by expressions that have the same type as would an expression that is an object of the corresponding type converted according to the integer promotions. Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign.
number of bits for smallest object that is not a bit-field (byte) CHAR_BIT 8
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
Emmanuel Delahaye
In 'fr.comp.lang.c', "Nicolas Favre-Félix" wrote:
byte = octet en français
La taille est >= 8 car il faut pouvoir y caser -127 à +127 La taille est d'exactement 8 octets quel que soit le compilateur ou le
système.
Non. Elle est bien >= 8 bits comme l'a indiqué Eric. Sur un DSP 56156 Motorola, l'adressage minimum est de 32 bits. Un char fait donc 32 bits. Mais ça n'a aucune importance (à part la désagréable impression de gacher de la place...) Idem avec les DSP TMS320C54 de Texas (16-bits)
D'autre part, on peut y stocker des valeurs de -128 à +127 , soit
Le minimum requis est -127 à +127. Attention à ne pas confondre ton implémentation avec la norme.
256 valeurs. Or 256 = 2^8. CQFD.
pour un unsigned char, les valeurs sont 0 à 255.
Seul ce cas permet de valider l'opération. En signé, il peut y avoir du complément à 1, à 2 ou signe + magnitude.
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', "Nicolas Favre-Félix" <n.favrefelix@__NOSPAM__free.fr>
wrote:
byte = octet en français
La taille est >= 8 car il faut pouvoir y caser -127 à +127
La taille est d'exactement 8 octets quel que soit le compilateur ou le
système.
Non. Elle est bien >= 8 bits comme l'a indiqué Eric. Sur un DSP 56156
Motorola, l'adressage minimum est de 32 bits. Un char fait donc 32 bits. Mais
ça n'a aucune importance (à part la désagréable impression de gacher de la
place...) Idem avec les DSP TMS320C54 de Texas (16-bits)
D'autre part, on peut y stocker des valeurs de -128 à +127 , soit
Le minimum requis est -127 à +127. Attention à ne pas confondre ton
implémentation avec la norme.
256 valeurs.
Or 256 = 2^8. CQFD.
pour un unsigned char, les valeurs sont 0 à 255.
Seul ce cas permet de valider l'opération. En signé, il peut y avoir du
complément à 1, à 2 ou signe + magnitude.
--
-ed- emdelYOURBRA@noos.fr [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
La taille est >= 8 car il faut pouvoir y caser -127 à +127 La taille est d'exactement 8 octets quel que soit le compilateur ou le
système.
Non. Elle est bien >= 8 bits comme l'a indiqué Eric. Sur un DSP 56156 Motorola, l'adressage minimum est de 32 bits. Un char fait donc 32 bits. Mais ça n'a aucune importance (à part la désagréable impression de gacher de la place...) Idem avec les DSP TMS320C54 de Texas (16-bits)
D'autre part, on peut y stocker des valeurs de -128 à +127 , soit
Le minimum requis est -127 à +127. Attention à ne pas confondre ton implémentation avec la norme.
256 valeurs. Or 256 = 2^8. CQFD.
pour un unsigned char, les valeurs sont 0 à 255.
Seul ce cas permet de valider l'opération. En signé, il peut y avoir du complément à 1, à 2 ou signe + magnitude.
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
Emmanuel Delahaye
In 'fr.comp.lang.c', "Nicolas Favre-Félix" wrote:
les char sont codés sur CHAR_BIT qui vaut au minimum 8.
Citez moi UNE SEULE plateforme qui a des chars de plus de 8 bits.
Texas TMS320C54 : 16-bit Motorola 56156 : 32-bit
Tous les codes C manipulant des bits seraient alors incompatibles...
Non, pourquoi?
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
In 'fr.comp.lang.c', "Nicolas Favre-Félix"
<n.favrefelix@__NOSPAM__free.fr> wrote:
les char sont codés sur CHAR_BIT qui vaut au minimum 8.
Citez moi UNE SEULE plateforme qui a des chars de plus de 8 bits.
Texas TMS320C54 : 16-bit
Motorola 56156 : 32-bit
Tous les codes C manipulant des bits seraient alors incompatibles...
Non, pourquoi?
--
-ed- emdelYOURBRA@noos.fr [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
les char sont codés sur CHAR_BIT qui vaut au minimum 8.
Citez moi UNE SEULE plateforme qui a des chars de plus de 8 bits.
Texas TMS320C54 : 16-bit Motorola 56156 : 32-bit
Tous les codes C manipulant des bits seraient alors incompatibles...
Non, pourquoi?
-- -ed- [remove YOURBRA before answering me] The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html <blank line> FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/
Nicolas Favre-Félix
"Emmanuel Delahaye" a écrit dans le message de news:
Non. Elle est bien >= 8 bits comme l'a indiqué Eric. Sur un DSP 56156 Motorola, l'adressage minimum est de 32 bits. Un char fait donc 32 bits. Mais
ça n'a aucune importance (à part la désagréable impression de gacher de la place...) Idem avec les DSP TMS320C54 de Texas (16-bits)
Mais alors le codage/décodage de données n'est plus compatible? Comment font les compilateurs? Si le programmeur a prévu un tableau de 4 char (donc 4*32 bits à la compilation) et qu'il fait des masques et des décalages pour mettre les 4 à la suite dans une variable de 32 bits (je pense notamment au codage des adresses IP), il y aura forcément des erreurs...
Dans quoi sont utilisés ces processeurs?
"Emmanuel Delahaye" <emdelYOURBRA@noos.fr> a écrit dans le message de news:
Non. Elle est bien >= 8 bits comme l'a indiqué Eric. Sur un DSP 56156
Motorola, l'adressage minimum est de 32 bits. Un char fait donc 32 bits.
Mais
ça n'a aucune importance (à part la désagréable impression de gacher de la
place...) Idem avec les DSP TMS320C54 de Texas (16-bits)
Mais alors le codage/décodage de données n'est plus compatible? Comment font
les compilateurs? Si le programmeur a prévu un tableau de 4 char (donc 4*32
bits à la compilation) et qu'il fait des masques et des décalages pour
mettre les 4 à la suite dans une variable de 32 bits (je pense notamment au
codage des adresses IP), il y aura forcément des erreurs...
"Emmanuel Delahaye" a écrit dans le message de news:
Non. Elle est bien >= 8 bits comme l'a indiqué Eric. Sur un DSP 56156 Motorola, l'adressage minimum est de 32 bits. Un char fait donc 32 bits. Mais
ça n'a aucune importance (à part la désagréable impression de gacher de la place...) Idem avec les DSP TMS320C54 de Texas (16-bits)
Mais alors le codage/décodage de données n'est plus compatible? Comment font les compilateurs? Si le programmeur a prévu un tableau de 4 char (donc 4*32 bits à la compilation) et qu'il fait des masques et des décalages pour mettre les 4 à la suite dans une variable de 32 bits (je pense notamment au codage des adresses IP), il y aura forcément des erreurs...
Dans quoi sont utilisés ces processeurs?
Benoit Dejean
Le Wed, 09 Jul 2003 18:50:05 +0200, Nicolas Favre-Félix a écrit :
Quand à la signitude ( ??? ) d'un char, il me semble que cela est dépendant de ta plate-forme. d'ailleurs ton compilateur a certainement une option pour modifier ceci
Sur la plupart des plateformes, les signed char sont codés en
complément vrai (ou complément à deux). Pour passer d'un nombre positif au même nombre négatif, il suffit d'inverser tous les bits et d'ajouter 1.
ça me fait une belle jambe. la norme ne dit rien à ce sujet il me semble.
les char sont codés sur CHAR_BIT qui vaut au minimum 8.
Citez moi UNE SEULE plateforme qui a des chars de plus de 8 bits. Tous les codes C manipulant des bits seraient alors incompatibles...
tous les codes C qui manipulent des bits ont un problème de portabilité par définition. lis les réponses de ED. cela dit, la norme garantit 8 bits.
-- "Ne perdez pas de vue qu'un programme rapide et incorrect est d'une utilité presque nulle." Ce qui est loin d'être incompatible avec la notion d'Art.
Le Wed, 09 Jul 2003 18:50:05 +0200, Nicolas Favre-Félix a écrit :
Quand à la
signitude ( ??? ) d'un char, il me semble que cela est dépendant de ta
plate-forme. d'ailleurs ton compilateur a certainement une option pour
modifier ceci
Sur la plupart des plateformes, les signed char sont codés en
complément vrai (ou complément à deux).
Pour passer d'un nombre positif au même nombre négatif, il suffit
d'inverser tous les bits et d'ajouter 1.
ça me fait une belle jambe.
la norme ne dit rien à ce sujet il me semble.
les char sont codés sur CHAR_BIT qui vaut au minimum 8.
Citez moi UNE SEULE plateforme qui a des chars de plus de 8 bits. Tous
les codes C manipulant des bits seraient alors incompatibles...
tous les codes C qui manipulent des bits ont un problème de portabilité
par définition. lis les réponses de ED. cela dit, la norme garantit 8
bits.
--
"Ne perdez pas de vue qu'un programme rapide et incorrect est d'une utilité presque nulle."
Ce qui est loin d'être incompatible avec la notion d'Art.
Le Wed, 09 Jul 2003 18:50:05 +0200, Nicolas Favre-Félix a écrit :
Quand à la signitude ( ??? ) d'un char, il me semble que cela est dépendant de ta plate-forme. d'ailleurs ton compilateur a certainement une option pour modifier ceci
Sur la plupart des plateformes, les signed char sont codés en
complément vrai (ou complément à deux). Pour passer d'un nombre positif au même nombre négatif, il suffit d'inverser tous les bits et d'ajouter 1.
ça me fait une belle jambe. la norme ne dit rien à ce sujet il me semble.
les char sont codés sur CHAR_BIT qui vaut au minimum 8.
Citez moi UNE SEULE plateforme qui a des chars de plus de 8 bits. Tous les codes C manipulant des bits seraient alors incompatibles...
tous les codes C qui manipulent des bits ont un problème de portabilité par définition. lis les réponses de ED. cela dit, la norme garantit 8 bits.
-- "Ne perdez pas de vue qu'un programme rapide et incorrect est d'une utilité presque nulle." Ce qui est loin d'être incompatible avec la notion d'Art.
Richard Delorme
Nicolas Favre-Félix a écrit:
Citez moi UNE SEULE plateforme qui a des chars de plus de 8 bits. Tous les codes C manipulant des bits seraient alors incompatibles...
PDP-10, où un char vaut 9 bits :
http://pdp10.nocrew.org/gcc/
-- Richard
Nicolas Favre-Félix a écrit:
Citez moi UNE SEULE plateforme qui a des chars de plus de 8 bits.
Tous les codes C manipulant des bits seraient alors incompatibles...