Wiem o int
i long
(numery 32-bitowe i 64-bitowe), ale jakie są uint
i ulong
?Jaka jest różnica między "int" i "uint"/"long" i "ulong"?
Odpowiedz
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
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.
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) –
@ Isak Savo: Naprawiono link, dziękuję za wskazanie błędu. –
@ 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#. –
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
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.
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 –
przy porównywaniu int i uint dla użycia, który z nich jest możliwy? –
Co to jest odpowiednik C++? – darkgaze