Czy słowo kluczowe unsigned ma domyślnie określony typ danych w C ++? Próbuję napisać funkcję dla klasy dla prototypu:
unsigned Rotate(unsigned object, int count)
Ale tak naprawdę nie rozumiem, co unsigned
to znaczy. Nie powinno tak być, unsigned int
czy coś?
Typy liczb całkowitych:
short -> signed short signed short unsigned short int -> signed int signed int unsigned int signed -> signed int unsigned -> unsigned int long -> signed long signed long unsigned long
Uważaj na char:
char (is signed or unsigned depending on the implmentation) signed char unsigned char
źródło
Tak, podpisane i niepodpisane mogą być również używane jako samodzielne specyfikatory typu
Typy danych liczb całkowitych char, short, long i int mogą być ze znakiem lub bez znaku, w zależności od zakresu liczb, które mają być reprezentowane. Typy ze znakiem mogą reprezentować zarówno wartości dodatnie, jak i ujemne, podczas gdy typy bez znaku mogą reprezentować tylko wartości dodatnie (i zero).
Liczba całkowita bez znaku zawierająca n bitów może mieć wartość od 0 do 2 n - 1 (czyli 2 n różnych wartości).
Jednak signed i unsigned mogą być również używane jako samodzielne specyfikatory typu, co oznacza to samo, co odpowiednio signed int i unsigned int. Poniższe dwie deklaracje są równoważne:
unsigned NextYear; unsigned int NextYear;
źródło
short
ilong
są również modyfikatorami typów . Jeśli piszeszshort s
, to faktycznie oznaczashort int s
, tak jakunsigned u
faktycznie oznaczaunsigned int u
. (iunsigned short
oznaczaunsigned short int
)Możesz przeczytać o słowie kluczowym unsigned w C ++ Reference .
Istnieją dwa różne typy w tej sprawie, podpisane i nie podpisane. Wartość domyślna dla liczb całkowitych jest podpisana, co oznacza, że mogą mieć wartości ujemne.
W systemie 32-bitowym liczba całkowita to 32 bity, co oznacza, że może zawierać wartość ~ 4 miliardy.
A kiedy jest podpisany, oznacza to, że musisz go podzielić, pozostawiając -2 miliardy do +2 miliardy.
Gdy jest bez znaku, wartość nie może zawierać żadnych liczb ujemnych, więc dla liczb całkowitych oznaczałoby to od 0 do +4 miliardów.
Więcej informacji na ten temat można znaleźć w Wikipedii .
źródło
Tak, to znaczy
unsigned int
. Kiedyś było tak, że jeśli nie określałeś typu danych w C, było wiele miejsc, w których po prostu zakładanoint
. Było to na przykład próba zwracania typów funkcji.Ta brodawka została w większości zlikwidowana, ale napotykasz tutaj jej ostatnie ślady. IMHO, kod powinien zostać naprawiony,
unsigned int
aby uniknąć tego rodzaju zamieszania, którego doświadczasz.źródło