Bonjour,
j'ai une question dont je n'arrive pas à trouver la réponse.
Sur une machine 16 bits avec le codage des entiers par complément à deux, quelle est le type de (32768) base 10 et (8000) en base 16
Merci
Bonjour,
j'ai une question dont je n'arrive pas à trouver la réponse.
Sur une machine 16 bits avec le codage des entiers par complément à deux, quelle est le type de (32768) base 10 et (8000) en base 16
Merci
Type n'est pas le terme approprié ici (le "type" serait entier signé sur 16 bit), je pense plutôt que tu demandais ce que cette valeur représentait ?
En fait 32768 n'est pas une valeur que l'on peut coder avec cette représentation, le plus grand entier qu'on puisse coder est 32767 :
0111 1111 1111 1111
au-delà on passe dans le négatif, la représentation binaire de 32768 est :
1000 0000 0000 0000
Le bit de poid fort étant à 1, il s'agit d'un nombre négatif, en fait il s'agit de -32768 :
~ 1000 0000 0000 0000 + 1 = 1000 0000 0000 0000 ( = 32768 dans une représentation binaire non signée)
--
Jedaï
Le type est la taille des tes variables selon ta cible :
int, float, u32, u16 ,etc
Bonjour,Envoyé par Menthe_a_l_eau
dans le cas des 2 valeurs que j'ai écrit, quel est le type de ces valeurs ?
Tu as dis toi-même qu'il s'agissait d'un int (et probablement long=int sur cette machine). Mais ta question n'a pas vraiment de sens, car le "type" d'un entier de 16 bit dépend du langage utilisé.
--
Jedaï
On me demande de typer ces valeurs.Envoyé par Jedai
Si ce n'est ni le signe ni le type du nombre, qu'est-ce que ça signifie alors ?
Si la question est texto celle-ci, alors c'est probablement un piège auquel tu dois répondre en disant que ces valeurs ne sont pas codables dans ces conditions (cf ma première réponse) ou peut-être éventuellement du type long long int, mais tout dépend du compilateur... C'est pourquoi la question est absurde sans autres précisions.Envoyé par Premium
--
Jedaï
Je recopie exactement ce qu'il m'est demandé.Envoyé par Jedai
Je ne sais pas si c'est plus clair
Sur une machine 16 bits avec le codage des entiers par complément à deux, typer de (32768) base 10 et (8000) en base 16.
Justifiez votre réponse. Si plusieurs choix sont possibles vous devrez les discuter.
Oui mais tu n'as toujours pas répondu à la question : on est dans quel contexte ? Quel langage, quel compilateur ? Ca pourrait aussi être juste du "unsigned int", mais là encore, tout ça c'est du C...
--
Jedaï
Bonjour,Envoyé par Jedai
Le langage est le C ansi.
Pour ce qui est du contexte et du compilateur, il n'y a pas de précision.
C'est une question qui est censée avoir une réponse par écrit et non en codant sur PC, c'est pour ça qu'il n'y a pas plus de précision.
Les types en C sont définis dans la norme.
Voici un exemple de ce qu'on peut y lire :
Donc quelle que soit la machine, 32768 ne peut être du type chort en C ansi 99.— 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
On continue :
On est bon— maximum value for an object of type unsigned short int
USHRT_MAX 65535 // 216 - 1
On est pas bon— maximum value for an object of type int
INT_MAX +32767 // 215 - 1
On est encore bon, et il en sera de même pour les types long long int et unsigned long long int.— 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
Donc 32768 peut être
- un unsigned short
- un unisgned int
- un long int
- un unsigned long int
- un long long int
- un unsigned long long int
Pour ce qui est 8000 en base 16, qui vaut 32768 en base 10, vu que l'ordinateur compte en base 2, c'est exactement la même chose....
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