Quelles sont les max et min de numéros courts de type pouvez stocker dans le C?
Je vais avoir du mal à saisir les types de données en C. je vais à travers un C et l'un des défis demande à ce que le nombre maximum et minimum d'une short
peut stocker.
À l'aide de sizeof(short);
je peux voir qu'un court consomme 2 octets. Cela signifie qu'il est de 16 bits, ce qui signifie deux nombres car il faut 8 bits pour stocker la représentation binaire d'un nombre. Par exemple, 9 serait 00111001
qui se remplit un peu. Alors serait-il pas en être de 0 à 99 pour les non signé, et -9 à 9 signé?
Je sais que je me trompe, mais je ne sais pas pourquoi. Il dit ici le maximum est de (-)32 767 pour signé, et 65 535 pour non signé.
short int, 2 Octets, 16 Bits, de -32 768 -> +de 32 767 Gamme (16 ko)
Juste par curiosité, quels sont les a des plages à la norme?
voir le lien dans Richard J. Ross III réponse: {SHRT_MAX} le Maximum de valeur de type short. Minimum Acceptable De La Valeur: +32 767
rappelez-vous, même si 65536 = 2^16, ainsi que par des limites.h limite est de 65535 parce que 65536 est considéré comme un dépassement de capacité
OriginalL'auteur Mohamad | 2012-07-29
Vous devez vous connecter pour publier un commentaire.
Pense en décimal pour une seconde. Si vous avez seulement 2 chiffres par un nombre, cela signifie que vous pouvez stocker de
00
à99
. Si vous avez 4 chiffres, qui devient0000
à9999
.Un nombre binaire est similaire à virgule, sauf les chiffres peuvent être seulement
0
et1
, au lieu de0
,1
,2
,3
, ...,9
.Si vous avez un certain nombre comme ceci:
C'est:
Donc, comme vous pouvez le voir, vous pouvez stocker de plus grandes valeurs que
9
dans un seul octet. Dans un entier non signé de 8 bits, vous pouvez stocker des valeurs de00000000
à11111111
, qui est de 255 en décimal.Dans un numéro à 2 octets, cette série devient de
00000000 00000000
à11111111 11111111
qui se trouve être 65535.Votre déclaration "il faut 8 bits pour stocker la représentation binaire d'un nombre", c'est comme dire "il faut 8 chiffres pour stocker la représentation décimale d'un nombre", ce qui n'est pas correct. Par exemple, le nombre 12345678901234567890 a plus de 8 chiffres. De la même manière, vous ne pouvez pas adapter tous numéros en 8 bits, mais seulement 256 d'entre eux. C'est pourquoi vous obtenez 2 octets (
short
), de 4 octets (int
) et de 8 octets (long long
). En vérité, si vous avez besoin d'encore plus élevée de la gamme de nombres, vous devez utiliser une bibliothèque.Aussi longtemps que les nombres négatifs sont concernés, dans un 2-complément de l'ordinateur, ils sont juste une convention pour l'emploi de plus de la moitié de la gamme de valeurs négatives. Cela signifie que les chiffres qui ont un
1
sur le côté gauche est considéré comme négatif.Cependant, ces chiffres sont en harmonie modulo 256 (modulo
2^n
sin
bits) à leur valeur positive que le nombre suggère vraiment. Par exemple, le nombre11111111
est de 255 si non signé, et-1
si signée qui sont congrus modulo 256.exactement. Il est assez similaire à la base de 10. Chaque fois que vous êtes confus, vous pouvez utiliser cette analogie pour mieux comprendre 😉
OriginalL'auteur Shahbaz
La référence que vous avez lu est correct. Au moins, pour l'habitude des implémentations C où
short
est de 16 bits qui n'est pas vraiment fixé dans la norme.16 bits peut contenir 2^16 modèles de bits, c'est 65536 possibilités. Signé shorts sont -32768 à 32767, unsigned short de 0 à 65535.
un bit est suffisant pour stocker un nombre dans l'intervalle [0;1]. Deux bits peut stocker 4 numéros. Et ainsi de suite ...
N ° 8 bits seulement des magasins dans la plage de 0 à 255. 16 bits stocke les numéros de la plage 0-25535. 32 bits (généralement
int
) peut stocker quelque part dans les 4 milliards. Vous obtenez l'idée. C'est tous des puissances de deux.OriginalL'auteur Keith Randall
Cela est défini dans
<limites.h>
, et estSHRT_MIN
&SHRT_MAX
.Il ne va pas lui faire comprendre, mais elle ne lui donner quelques simples nombres décimaux.
<limits.h>
peut également être un outil très précieux lors de la rédaction des programmes portables, et qui sait si c'est la question au cœur de la question? Cette question a juste le bon équilibre entre la théorie et de la pratique dans les réponses.OriginalL'auteur Richard J. Ross III
D'autres ont posté assez de bonnes solutions pour vous, mais je ne pense pas qu'ils ont suivi de votre façon de penser et d'expliquer d'où vous avez eu tort. Je vais essayer.
Jusqu'à ce point, vous avez raison (bien que
short
n'est pas garantie de 2 octets commeint
n'est pas garantie 4 — la seule garantie de taille standard (si je me souviens bien) estchar
qui doit toujours être de 1 octet).À partir d'ici vous avez commencé à dériver un peu. Il n'a pas vraiment de prendre de 8 bits pour stocker un nombre. Selon un certain nombre, il peut prendre 16, 32 ou 64 encore plus de bits pour stocker. En divisant votre 16 bits en 2 est faux. Si ce n'est un PROCESSEUR de mise en œuvre spécifiques, nous avons pu avoir, par exemple, de 2 bits. Dans ce cas, ces deux bits peut stocker des valeurs comme:
Pour le magasin 4, nous avons besoin de 3 bits. Et donc, la valeur serait "pas apte" causant un débordement. Même s'applique à 16 bits. Par exemple, disons que nous avons unsigned "255" en décimal stockées dans la 16-bits de la représentation binaire serait
0000000011111111
. Lorsque vous ajoutez 1 à ce nombre, il devient0000000100000000
(256 en décimal). Donc, si vous aviez seulement 8 bits, il serait de débordement et de devenir 0 parce que le bit le plus significatif auraient été jetés.Maintenant, le maximum nombre non signé, vous pouvez en 16 bits, la mémoire est —
1111111111111111
, qui est de 65535 en décimal. En d'autres termes, pour les nombres non signés - ensemble de tous les bits à 1, et qui vous donnera la valeur maximale possible.Pour les nombres signés, cependant, le bit le plus significatif représente un signe — 0 pour positif et 1 pour le négatif. Pour le négatif, la valeur maximale est de
1000000000000000
, qui est -32678 en base 10. Les règles pour la signature de représentation binaire sont bien décrits ici.Espère que cela aide!
Vous êtes les bienvenus! J'ai été intrigué par ces choses moi-même 🙂 Tout est en base 10 😀
OriginalL'auteur
La formule pour trouver l'aire de répartition de toute binaire non signé représentés nombre:
1 << (sizeof(type)*8)
Comment cela fonctionne?
<<
est le passage à gauche de l'opérateur. Si vous déplacez un bit à 1 de n bits vers la gauche, vous obtenez 2 à la puissance n.^
signifie xor au niveau du bit en C.Merci. Je ne savais pas une puissance de deux pourrait être juste un décalage à gauche. Commentaire +1?
Ce n'est pas correct. Entiers en C peut avoir de remplissage.
OriginalL'auteur Linuxios