[Débutant] utiliser un unsigned char au lieu d'un u. short
Bonjour tout le monde,
Je me pose la question suivante, est-il préférable d'utiliser un unsigned char qui va prendre un seul octet au lieu d'un unsigned short si je veux créer une boucle comme dans l'exemple ci-dessous ?
Le nom char me trouble mais il n'est pas réservé au stockage de code ASCII ?
ex :
Code:
1 2 3 4 5 6 7
|
unsigned char i = 1;
while(i < 255)
(
i++;
) |
Une autre petite question sur le même sujet, je vois qu'un int peut faire 2 ou 4 octets mais quand je déclare :
unsigned int i;
est-ce que seulement 2 octets sont réservés ou 4 ?
Merci d'avance pour vos réponse :D
Bye
Re: [Débutant] utiliser un unsigned char au lieu d'un u. sho
Citation:
Envoyé par Djakisback
Je me pose la question suivante, est-il préférable d'utiliser un unsigned char qui va prendre un seul octet au lieu d'un unsigned short
Si un jour tu dois boucler plus, tu peux prendre un short, sinon tu peux garder un char. Sachant que cette variable n'est pas globale, tu ne sauvera rien (à part un peu de stack) à la déclarer char au lieu de short.
Citation:
Le nom char me trouble mais il n'est pas réservé au stockage de code ASCII ?
Nom.
Citation:
Une autre petite question sur le même sujet, je vois qu'un int peut faire 2 ou 4 octets mais quand je déclare :
unsigned int i;
est-ce que seulement 2 octets sont réservés ou 4 ?
Ça dépend de ta machine : le type int n'est pas portable. Si tu veux 16 bits tu prends un short, sinon un long,et tu seras sur de ton coup.
Pour ta question, dans la plupart des cas d'usages "normaux" ( un pentium avec windows), le int sera sur 32 bits.
Re: [Débutant] utiliser un unsigned char au lieu d'un u. sho
Citation:
Envoyé par Djakisback
Je me pose la question suivante, est-il préférable d'utiliser un unsigned char qui va prendre un seul octet
Oui, non, peut être... Dépend de la plateforme...
Citation:
au lieu d'un unsigned short si je veux créer une boucle comme dans l'exemple ci-dessous ?
Le nom char me trouble mais il n'est pas réservé au stockage de code ASCII ?
Non. C'est un entier comme les autres, sauf qu'on ne sait pas si il est signé ou non. Si ça a son importance, on peut le qualifier avec 'signed' ou 'unsigned'. Les limites de [[un]signed ]char sont définies dans <limites.h>
Code:
1 2 3 4
|
char : CHAR_MIN .. CHAR_MAX
unsigned char : 0 .. UCHAR_MAX
signed char : SCHAR_MIN .. SCHAR_MAX |
Citation:
ex :
Code:
1 2 3 4 5 6 7
|
unsigned char i = 1;
while(i < 255)
(
i++;
) |
int ou unsigned int. Laisse faire la nature...
Citation:
Une autre petite question sur le même sujet, je vois qu'un int peut faire 2 ou 4 octets mais quand je déclare :
unsigned int i;
est-ce que seulement 2 octets sont réservés ou 4 ?
Aucune idée. Un int est défini par sa gamme de valeur. INT_MIN .. INT_MAX sont définis dans <limits.h>
http://emmanuel-delahaye.developpez.com/init_c.htm#type
Re: [Débutant] utiliser un unsigned char au lieu d'un u. sho
Citation:
Envoyé par DavG
Citation:
Une autre petite question sur le même sujet, je vois qu'un int peut faire 2 ou 4 octets mais quand je déclare :
unsigned int i;
est-ce que seulement 2 octets sont réservés ou 4 ?
Ça dépend de ta machine : le type int n'est pas portable. Si tu veux 16 bits tu prends un short, sinon un long,et tu seras sur de ton coup.
Pour ta question, dans la plupart des cas d'usages "normaux" ( un pentium avec windows), le int sera sur 32 bits.
La taille des short et des long n'est pas plus garantie que celle des int, celle la taille minimale est garantie
Re: [Débutant] utiliser un unsigned char au lieu d'un u. sho
Citation:
Envoyé par gl
La taille des short et des long n'est pas plus garantie que celle des int, celle la taille minimale est garantie
Je viens de l'apprendre : depuis le temps que je programme, je n'ai jamais vu de short autre que 16 bits .... qui utilises ça ???
Re: [Débutant] utiliser un unsigned char au lieu d'un u. sho
Citation:
Envoyé par DavG
Citation:
Envoyé par gl
La taille des short et des long n'est pas plus garantie que celle des int, celle la taille minimale est garantie
Je viens de l'apprendre : depuis le temps que je programme, je n'ai jamais vu de short autre que 16 bits .... qui utilises ça ???
En regardant dans la doc du C99, les types suivants sont définis :
Code:
1 2 3 4
| <stdint.h>
typedef short int16_t;
typedef long int32_t; |
Ce qui me confirme dans l'idée qu'on peut assumer qu'un short c'est 16 bits et un long 32 ... à moins que je n'ai manqué quelque chose :?
Re: [Débutant] utiliser un unsigned char au lieu d'un u. sho
Citation:
Envoyé par DavG
En regardant dans la doc du C99, les types suivants sont définis :
Code:
1 2 3 4
| <stdint.h>
typedef short int16_t;
typedef long int32_t; |
Ce qui me confirme dans l'idée qu'on peut assumer qu'un short c'est 16 bits et un long 32 ... à moins que je n'ai manqué quelque chose :?
Dans quel doc as tu trouver ca ?
Personellement le seul truc que j'ai vu dans un draft de la norme c'est ceci :
Citation:
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
-- minimum value for an object of type signed char
SCHAR_MIN -127 // -(27-1)
-- maximum value for an object of type signed char
SCHAR_MAX +127 // 27-1
-- maximum value for an object of type unsigned char
UCHAR_MAX 255 // 28-1
-- minimum value for an object of type char
CHAR_MIN see below
-- maximum value for an object of type char
CHAR_MAX see below
-- maximum number of bytes in a multibyte character, for
any supported locale
MB_LEN_MAX 1
-- minimum value for an object of type short int
SHRT_MIN -32767 // -(215-1)
-- maximum value for an object of type short int
SHRT_MAX +32767 // 215-1
-- maximum value for an object of type unsigned short int
USHRT_MAX 65535 // 216-1
-- minimum value for an object of type int
INT_MIN -32767 // -(215-1)
-- maximum value for an object of type int
INT_MAX +32767 // 215-1
-- maximum value for an object of type unsigned int
UINT_MAX 65535 // 216-1
-- minimum value for an object of type long int
LONG_MIN -2147483647 // -(231-1)
-- maximum value for an object of type long int
LONG_MAX +2147483647 // 231-1
-- maximum value for an object of type unsigned long int
ULONG_MAX 4294967295 // 232-1
-- minimum value for an object of type long long int
LLONG_MIN -9223372036854775807 // -(263-1)
-- maximum value for an object of type long long int
LLONG_MAX +9223372036854775807 // 263-1
-- maximum value for an object of type unsigned long long
int
ULLONG_MAX 18446744073709551615 // 264-1
qui definie les plages minimales garanties
ainsi qu'un paragraphe sur les types intx_t sans preciser leur correspondance avec les autres types (d'ailleurs il est préciser que ces type intx_t peuvent ne pas exister sur certaines implementations).
Re: [Débutant] utiliser un unsigned char au lieu d'un u. sho
Citation:
Envoyé par DavG
Citation:
Envoyé par gl
La taille des short et des long n'est pas plus garantie que celle des int, celle la taille minimale est garantie
Je viens de l'apprendre : depuis le temps que je programme, je n'ai jamais vu de short autre que 16 bits .... qui utilises ça ???
Je ne met que des slips!
Re: [Débutant] utiliser un unsigned char au lieu d'un u. sho
Citation:
Envoyé par DavG
En regardant dans la doc du C99, les types suivants sont définis :
Code:
1 2 3
| <stdint.h>
typedef short int16_t;
typedef long int32_t; |
Bzzt! C'est pas la doc C99 que tu as regardé, c'est le fichier de ton implémentation.
Citation:
Ce qui me confirme dans l'idée qu'on peut assumer qu'un short c'est 16 bits et un long 32 ... à moins que je n'ai manqué quelque chose :?
Sur cette machine, oui.
Attention, les types fixes de C99 ne sont pas portables. Ils n'existent que sur les machines qui les supportent.
Par exemple un DSP Motorola TMS320C54 ne sait pas addresser moins de 16 bits. Le type int8_t ne peux donc pas être implémenté (normal, CHAR_BIT vaut 16). Par contre on pourrait trouver un int8_least_t .
Re: [Débutant] utiliser un unsigned char au lieu d'un u. sho
Citation:
Envoyé par Emmanuel Delahaye
Citation:
Envoyé par DavG
En regardant dans la doc du C99, les types suivants sont définis :
Code:
1 2 3
| <stdint.h>
typedef short int16_t;
typedef long int32_t; |
Bzzt! C'est pas la doc C99 que tu as regardé, c'est le fichier de ton implémentation.
Non, c'est dans un des liens sur le C99 que tu donnes dans ton site :wink:
En fait, a force de tout lire j'en arrive a la conclusion que ce n'est pas ecrit dans une norme mais que sans doute par convention un short ca fait 16 bits :D
Re: [Débutant] utiliser un unsigned char au lieu d'un u. sho
Citation:
Envoyé par DavG
En fait, a force de tout lire j'en arrive a la conclusion que ce n'est pas ecrit dans une norme mais que sans doute par convention un short ca fait 16 bits :D
La norme dit clairement que la gamme minimale d'un short est -32767..32767. Tu en déduis ce que tu veux sur la taille d'un short...