Wiem o int
i long
(numery 32-bitowe i 64-bitowe), ale czym są uint
i ulong
?
118
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
iulong
są niepodpisanymi wersjamiint
ilong
. To znaczy, że nie mogą być negatywne. Zamiast tego mają większą wartość maksymalną.Aby napisać literał unsigned int w kodzie źródłowym, możesz użyć sufiksu
u
lubU
na przykład123U
.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 .
źródło
u
oznaczaunsigned
, więculong
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 gdyulong
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ódło
Różnica polega na tym, że
uint
iulong
są typami danych bez znaku, co oznacza, że zakres jest inny: nie akceptują wartości ujemnych:źródło
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).
źródło