2010-09-16 16 views

Odpowiedz

123

Pierwotne typy danych z prefiksem "u" to niepodpisane wersje o tych samych rozmiarach bitowych. Skutecznie oznacza to, że nie mogą przechowywać liczb ujemnych, ale z drugiej strony mogą przechowywać liczby dodatnie dwa razy większe niż ich podpisane odpowiedniki. Podpisane odpowiedniki nie mają prefiksu "u".

Granice dla int (32 bitów) są:

int: –2147483648 to 2147483647 
uint: 0 to 4294967295 

I przez długi (64 bitów)

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

To jest całkiem fajne do wymyślenia ręcznie. 32-bitowa zmienna podpisana używa 1-bitowego znaku (dodatniego lub ujemnego), więc może przechowywać wartości między -2^31 a + 2^31 - 1 –

+0

przy porównywaniu int i uint dla użycia, który z nich jest możliwy? –

+0

Co to jest odpowiednik C++? – darkgaze

27

uint i ulong to niepodpisane wersje int i long. Oznacza to, że nie mogą być ujemne. Zamiast tego mają większą maksymalną wartość.

 
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 

Aby napisać dosłownego unsigned int w kodzie źródłowym można użyć przyrostka u lub U np 123U.

Nie powinieneś używać uint i ulong w twoim publicznym interfejsie, jeśli chcesz być CLS-Compliant.

Przeczytaj dokumentację uzyskać więcej informacji:

Nawiasem mówiąc, istnieje również short i ushort i byte i sbyte.

+0

To jest interesujące - co masz na myśli mówiąc o zgodności z CLS? Link prowadzi do dokumentacji MSDN dla int. Jeśli przez "CLS" masz na myśli C# language spec to nie rozumiem - specyfikacja wyraźnie opisuje zarówno uint, jak i ulong (sekcja 1.3) –

+0

@ Isak Savo: Naprawiono link, dziękuję za wskazanie błędu. –

+0

@ Isak Savo: Ważne jest, aby być zgodnym z CLS, jeśli piszesz interfejs, który może być używany przez inne języki .NET niż C#. –

6

Różnica polega na tym, że uint i ulong są unsigned rodzaje danych, która zakres jest inny: nie akceptują wartości ujemnych:

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 oznacza unsigned, więc ulong to duża liczba bez znaku. Możesz przechowywać większą wartość w ulong niż long, ale nie można wprowadzać liczb ujemnych.

Wartość long jest zapisana w 64-bitach, z pierwszą cyfrą do wyświetlenia, jeśli jest to liczba dodatnia/ujemna. podczas gdy ulong jest również 64-bitowy, ze wszystkimi 64 bitami do przechowywania numeru. więc maksimum ulong wynosi 2 (64) -1, natomiast długie to 2 (63) -1.

Powiązane problemy