2009-08-28 6 views
4

Je viens juste de commencer à lire sur le langage C#, et l'une des premières sections de mon matériel de lecture est, naturellement, les variables et les types.Incompatibilité des types entiers C#

En peu de temps je suis tombé sur la table types intégrale, qui énumérait sbyte, byte, short, ushort, int, uint, long, ulong et char. L'exception à l'appariement ici est char, alors ne tenons pas compte et jetons un oeil sur les autres.

La première paire, byte, préfixe la version signée avec un "s", et laisse la version non signée sans préfixe. Mais pour toutes les autres paires, la relation est inversée ... la version signée est sans préfixe et le non signé a un préfixe "u".

Y a-t-il une raison à cela que je devrais être au courant, ou est-ce juste un caprice de conception?

Link pour référence: http://msdn.microsoft.com/en-us/library/exx3b86w.aspx

+2

Pour votre information, ce était un point chaudement contesté lors de la conception initiale du cadre, à la fin des années 1990. –

Répondre

13

Les octets sont conventionnellement traités comme un motif de bits plutôt qu'un nombre normal, et les valeurs "standard" pour un octet sont comprises entre 0 et 255. La version signée de l'octet est le cas anormal, avec des valeurs traitées comme -128 à 127.

Pour tous les autres types numériques, les valeurs «standard» sont signées, car cela correspond à nos intuitions quotidiennes sur les nombres (c'est-à-dire qu'elles peuvent être négatives aussi bien que positives). Pour les types numériques, les versions non signées sont le cas anormal.

(je ne pense pas que j'ai jamais utilisé sbyte dans tout code monde réel, et j'utilise int, long etc beaucoup plus souvent que j'utilise leurs homologues non signés.)

+0

Sons logique je suppose. :) Merci! – grimman

4

Je devine que byte est probablement beaucoup plus fréquent d'être utilisé comme un type non signé plutôt que d'un signé le type.

Questions connexes