Wiem o int
i long
(numery 32-bitowe i 64-bitowe), ale czym są uint
i ulong
?
Wiem o int
i long
(numery 32-bitowe i 64-bitowe), ale czym są uint
i ulong
?
Odpowiedzi:
Pierwotne typy danych z prefiksem „u” to wersje bez znaku o tych samych rozmiarach bitowych. W rzeczywistości 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ą przedrostka „u”.
Limity dla int (32 bity) są następujące:
int: –2147483648 to 2147483647
uint: 0 to 4294967295
I przez długi czas (64 bity):
long: -9223372036854775808 to 9223372036854775807
ulong: 0 to 18446744073709551615
uint
i ulong
są niepodpisanymi wersjami int
i long
. To znaczy, że nie mogą być negatywne. Zamiast tego mają większą wartość maksymalną.
Typ Min Max Zgodny z CLS int -2 147 483 648 2 147 483 647 Tak uint 0 4 294 967 295 Nr długie –9 223 372 036 854 775 808 9 223 372 036 854 775 807 Tak ulong 0 18 446 744 073 709 551 615 Nr
Aby napisać literał unsigned int w kodzie źródłowym, możesz użyć sufiksu u
lub U
na przykład 123U
.
Nie powinieneś używać uint i ulong w swoim interfejsie publicznym, jeśli chcesz być zgodny z CLS .
Przeczytaj dokumentację, aby uzyskać więcej informacji:
Nawiasem mówiąc, jest też short i ushort oraz byte i sbyte .
u
oznacza unsigned
, więc ulong
jest duża liczba bez znaku. Możesz przechowywać większą wartość ulong
niż long
, ale niedozwolone są liczby ujemne.
long
Wartość jest przechowywana w wersji 64-bitowej, z pierwszą cyfrą, aby zobaczyć, czy jest to liczba dodatnia / ujemna. podczas gdy ulong
jest również 64-bitowy, ze wszystkimi 64-bitowymi do przechowywania liczby. więc maksimum ulong to 2 (64) -1, a long to 2 (63) -1.
Różnica polega na tym, że uint
i ulong
są typami danych bez znaku, co oznacza, że 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
Minęło trochę czasu, odkąd ja C ++, ale te odpowiedzi są trochę błędne.
Jeśli chodzi o rozmiar, „int” nie jest niczym. Jest to hipotetyczna wartość standardowej liczby całkowitej; zakłada się, że jest szybki do celów takich jak iteracja. Nie ma ustalonego rozmiaru.
Tak więc odpowiedzi są poprawne w odniesieniu do różnic między int i uint, ale są niepoprawne, gdy mówią o „jak duże są” lub jaki jest ich zakres. Ten rozmiar jest niezdefiniowany, a dokładniej, zmieni się wraz z kompilatorem i platformą.
Publiczne omawianie rozmiaru swoich kawałków nigdy nie jest uprzejme.
Podczas kompilacji programu, int ma mieć rozmiar, jak wziąłeś abstrakcyjny C / C ++ i przekształcił go w betonowej kodu maszynowego.
W szczególności: jeśli piszesz program 32-bitowy, int będzie jedną rzeczą, 64-bitową, może być inna, a 16-bitową jest inna. Przeszedłem przez wszystkie trzy i przez chwilę patrzyłem na dreszcz 6502
Krótkie wyszukiwanie w Google pokazuje to: https://www.tutorialspoint.com/cprogramming/c_data_types.htm To także dobra informacja: https://docs.oracle.com/cd/E19620-01/805-3024/lp64- 1 / index.html
użyj int, jeśli naprawdę nie obchodzi cię, jak duże są twoje bity; może się zmienić.
Użyj size_t i ssize_t, jeśli chcesz wiedzieć, jak duże jest coś.
Jeśli czytasz lub zapisujesz dane binarne, nie używaj int. Użyj (zwykle zależnego od platformy / źródła) słowa kluczowego. WinSDK ma wiele dobrych, możliwych do utrzymania przykładów tego. Inne platformy też.
Spędziłem DUŻO czasu przeglądając kod od ludzi, którzy "SMH" myśląc, że to wszystko jest tylko akademickie / pedantyczne. Ci zjadali ludzi, którzy piszą kod nie do utrzymania. Jasne, jest łatwy w użyciu, wpisz „int” i używaj go bez dodatkowego wpisywania. To dużo pracy, aby dowiedzieć się, co naprawdę mieli na myśli, i trochę odrętwiające.
To kiepskie kodowanie, kiedy mieszasz int.
użyj int i uint, gdy chcesz po prostu szybką liczbę całkowitą i nie przejmujesz się zakresem (innym niż ze znakiem / bez znaku).