2010-09-16 34 views

Répondre

123

Les types de données primitifs précédés de «u» sont des versions non signées avec les mêmes tailles de bits. En effet, cela signifie qu'ils ne peuvent pas stocker de nombres négatifs, mais d'un autre côté ils peuvent stocker des nombres positifs deux fois plus grands que leurs homologues signés. Les homologues signés n'ont pas de préfixe "u".

Les limites int (32 bits) sont:

int: –2147483648 to 2147483647 
uint: 0 to 4294967295 

Et pour longtemps (64 bits):

long: -9223372036854775808 to 9223372036854775807 
ulong: 0 to 18446744073709551615 
+5

C'est assez amusant de travailler à la main. Une variable signée 32 bits utilise 1 bit pour le signe (positif ou négatif), donc peut stocker des valeurs entre -2^31 et + 2^31 - 1 –

+0

en comparant int et uint pour l'usage, lequel est faisable? –

+0

Quel est l'équivalent C++? – darkgaze

27

uint et ulong sont les versions non signées de int et long. Cela signifie qu'ils ne peuvent pas être négatifs. Au lieu de cela, ils ont une valeur maximale plus grande.

 
Type Min       Max       CLS-compliant 
int  -2,147,483,648    2,147,483,647     Yes 
uint 0        4,294,967,295     No 
long –9,223,372,036,854,775,808 9,223,372,036,854,775,807  Yes 
ulong 0        18,446,744,073,709,551,615 No 

Pour écrire un entier non signé littéral dans votre code source, vous pouvez utiliser le suffixe u ou U par exemple 123U.

Vous ne devriez pas utiliser uint et ulong dans votre interface publique si vous souhaitez être CLS-Compliant.

Lisez la documentation pour plus d'informations:

Par ailleurs, il y a aussi short et ushort et byte et sbyte.

+0

Ceci est intéressant - que voulez-vous dire par rapport à CLS? Le lien va à la documentation MSDN pour int. Si par "CLS" vous voulez dire la spécification de langage C# alors je ne comprends pas - la spécification décrit clairement à la fois uint et ulong (section 1.3) –

+0

@Isak Savo: Lien fixe, merci d'avoir signalé l'erreur. –

+0

@Isak Savo: Il est important d'être compatible avec CLS si vous écrivez une interface qui pourrait être utilisée par d'autres langages .NET que C#. –

6

La différence est que le uint et ulong sont des types de données non signés, ce qui signifie la plage est différente: ils n'acceptent pas les valeurs négatives:

int range: -2,147,483,648 to 2,147,483,647 
uint range: 0 to 4,294,967,295 

long range: –9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 
ulong range: 0 to 18,446,744,073,709,551,615 
9

u signifie unsigned, donc ulong est un grand nombre sans signe. Vous pouvez stocker une valeur plus élevée dans ulong que long, mais aucun nombre négatif autorisé.

Une valeur long est stockée en 64 bits, son premier chiffre indiquant s'il s'agit d'un nombre positif/négatif. tandis que ulong est également 64 bits, avec tous les 64 bits pour stocker le nombre. donc le maximum de ulong est 2 (64) -1, alors que long est 2 (63) -1.