Widziałem ten unsigned
„bez typu” typ używany kilka razy, ale nigdy nie widziałem jego wyjaśnienia. Przypuszczam, że istnieje odpowiedni signed
typ. Oto przykład:
static unsigned long next = 1;
/* RAND_MAX assumed to be 32767 */
int myrand(void) {
next = next * 1103515245 + 12345;
return((unsigned)(next/65536) % 32768);
}
void mysrand(unsigned seed) {
next = seed;
}
Co zebrałem do tej pory:
- w moim systemie, sizeof(unsigned) = 4
(wskazówka na 32-bitowy int bez znaku)
- może być użyty jako skrót do rzutowania innego typu na wersję bez znaku:
signed long int i = -42;
printf("%u\n", (unsigned)i);
Czy to ANSI C, czy tylko rozszerzenie kompilatora?
long
zamiastlong int
jest bardzo powszechne, więc nie jestem pewien, dlaczegounsigned
zamiast tegounsigned int
byłoby to nie do przyjęcia.w C
unsigned
jest skrótem dounsigned int
.Masz to samo,
long
ponieważ jest to skrót dolong int
Możliwe jest również zadeklarowanie
unsigned long
(będzie to aunsigned long int
).Jest to zgodne ze standardem ANSI
źródło
unsigned
jest taki sam, jak,unsigned int
ale przeszukałem projekt komitetu WG14 / N1124 - 6 maja 2005 r. ISO / IEC 9899: TC2 dlaunsigned
i nie mogłem znaleźć, gdzie jest zdefiniowane ... czy mógłbyś zacytować część, w której jest zdefiniowana?W C i C ++
unsigned = unsigned int (Integer type) signed = signed int (Integer type)
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.
Liczba całkowita bez znaku jest dodatnia lub zero.
Podpisane liczby całkowite są przechowywane w komputerze przy użyciu uzupełnienia do 2.
źródło
Zgodnie z C17 6.7.2 §2:
Tak więc w przypadku
unsigned int
możemy albo napisaćunsigned
lubunsigned int
, czy czujemy się szalonyint unsigned
. Ten ostatni, ponieważ standard jest na tyle głupi, że dopuszcza „… może wystąpić w dowolnej kolejności, ewentualnie zmieszany”. To znana wada języka.Odpowiednie kod C zastosowania
unsigned int
.źródło
Sprowadzając odpowiedź z innego pytania .
Ze specyfikacji C , sekcja 6.7.2:
Oznacza to
unsigned
, że jeśli nie określono typu, domyślnieunsigned int
. Więc pisanieunsigned a
jest tym samym, counsigned int a
.źródło