unsigned short vs unsigned int - parfois, ils sont de la même gamme?
Quelle est la différence entre unsigned short
et unsigned int
? J'ai trouvé que unsigned short
est 0-65,535
et unsigned int
est 0-65,535
ou 0-4,294,967,295
. Je ne comprends pas la différence très bien. Comment puis-je connaître la taille du type de données dans mon architecture? Et si par exemple c = (unsigned short) d;
quand c
est un unsigned short
et d est une unsigned int
; qu'est-ce que cela signifie? le premier 16 bits à partir de d
sont affectés à c
?
Pourquoi il y a trois langues mentionnées?
Sonne comme C, en supprimant les balises de langue étrangère.
Il n'est pas générale pour les 3 langues?
Non, pas vraiment. Java a une chose différente.
Ah ok! De la sorte? 🙂
Sonne comme C, en supprimant les balises de langue étrangère.
Il n'est pas générale pour les 3 langues?
Non, pas vraiment. Java a une chose différente.
Ah ok! De la sorte? 🙂
OriginalL'auteur mpluse | 2013-03-17
Vous devez vous connecter pour publier un commentaire.
Vous êtes vraiment se demander quelle est la différence entre
short
etint
. La réponse est queshort
peut être plus restreinte, mais peut aussi être de la même largeur que,int
. C'est pratiquement tout ce que nous savons pour sûr, indépendant de la plate-forme. Beaucoup de plates-formes 32 bitsint
et 16 bitsshort
, mais pas tous.Non, je ne vais pas, s'il vous plaît poser une autre question, plutôt que de les ajouter sur plus de bits à celui qui est déjà une réponse. Si vous recherchez pour votre nouveau demandes de renseignements que vous trouverez probablement qu'ils sont déjà des questions avec des réponses ici.
Ok. Merci, de toute façon.
OriginalL'auteur John Zwinck
C'est un lien utile pour expliquer l'histoire de types de données C:
http://en.wikipedia.org/wiki/C_data_types
De sorte que la taille de votre type de données dépend de la plateforme, mais si votre int de 32 bits dans la longueur, puis il sera en mesure de représenter l'un des 2^32 numéros différents (0 - 4,294,967,295 si non signé). De même, si votre court est de 16 bits en longueur, alors il peut représenter l'un des 2^16 numéros différents (de 0 à 65.535 si non signé).
Ce lien vous donne les détails de mise en œuvre pour Visual Studio 2005, où les entiers de 32 bits (4 octets) et les shorts sont de 16 bits (2 octets):
http://msdn.microsoft.com/en-us/library/s3f49ktz(v=vs. 80).aspx
Exacte de la mise en œuvre dépendra de votre compilateur.
Que pour la dernière partie de votre question, oui, si vous tentez de faire tomber un entier plus grand que le court du maximum de la valeur à une courte alors vous allez vous retrouver avec une valeur différente (probablement le premier 16 bits, mais vous devez tester pour être sûr).
Voir mon edit au dessus
J'ai déjà vu le lien. TY
OriginalL'auteur gavinj500
Nous ne pouvons pas dire une variable de type nom (short, int, long, double, etc.) a pour point de bits de longueur dans tous microprocesseur architectures et les langages de programmation. C'est surtout dépendait de microprocesseurs' architecture et bien sûr, les langages de programmation de la définition. Généralement, signed/unsigned short devrait avoir (je l'espère) la moitié de bits de taille de signed/unsigned int.
short
etint
peut très bien être de 16 bits. C'était le cas sur le DOS, BTW.OriginalL'auteur ceremcem
Eh bien d'abord, vous devez comprendre ce qu'est un unsigned int et court.
Tout est décomposé en morceaux.
Un court est de 16 bits, chaque bit étant un 1 ou un 0. Pour des raisons de simplicité, je vais le démontrer avec 4 bits
Remarquez qu'avec un nombre non signé, la gamme de nombre est plus grand, nous pouvons faire
1111 = 15.
Mais avec un signé nombre, le maximum de possibilité est
0111 = 7.
Maintenant un court dispose de 16 bits, en lui donnant
Un entier 32 bits, ce qui donne une gamme de
Ah. Lorsque vous faites un court, elle ne garantit pas un 16 bits, alors qu'un 16bit Int. C'est donc pour ces cas, quand vous en avez absolument besoin d'un entier 16 bits. Un peu bizarre.
Extrêmement mal... un
char
est d'au moins 8 bits, unshort
ou unint
16, unlong
32 bits. Et sur le CRAY ils sont tous 32 bits.Hein? @vonbrand int de 32 bits, donc pourquoi la plage est de 2^31-1
La taille et la gamme de
int
la mise en œuvre est définie. La norme exige que la gamme est (comme pourshort
) au moins-32767
à32767
, de sorte qu'unint
doit être d'au moins 16 bits de large. Pourunsigned
(int
etshort
), la plage doit être d'au moins0
à65535
, de sorte qu'il doit être d'au moins 16 bits de large. Aussi, la norme exige que la gamme de(unsigned) short
est contenue dans la plage de(unsigned) int
, et la gamme de(unsigned) char
doivent être contenues dans la plage de(unsigned) short
. Il est parfaitement légitime que tous ces types ont la même largeur.OriginalL'auteur BrettD