Ich habe diesen unsigned
"typenlosen" Typ ein paar Mal gesehen, aber nie eine Erklärung dafür gesehen. Ich nehme an, es gibt einen entsprechenden signed
Typ. Hier ist ein Beispiel:
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;
}
Was ich bisher gesammelt habe:
- auf meinem System sizeof(unsigned) = 4
(Hinweise auf ein 32-Bit-Int ohne Vorzeichen)
- es kann als Abkürzung für das Umwandeln eines anderen Typs in die vorzeichenlose Version verwendet werden:
signed long int i = -42;
printf("%u\n", (unsigned)i);
Ist das ANSI C oder nur eine Compiler-Erweiterung?
long
stattlong int
ist sehr verbreitet, daher bin ich mir nicht sicher, warumunsigned
stattunsigned int
nicht akzeptabel wäre.in C
unsigned
ist eine Verknüpfung fürunsigned int
.Sie haben das gleiche für
long
das ist eine Abkürzung fürlong int
Und es ist auch möglich, a zu deklarieren
unsigned long
(es wird a seinunsigned long int
).Dies ist im ANSI-Standard enthalten
quelle
unsigned
wie ist das gleiche ,unsigned int
aber ich habe eine Suche auf WG14 / N1124 Committee Draft - 6. Mai 2005 ISO / IEC 9899: TC2 fürunsigned
finden und konnte nicht in dem festgelegt ist ... könnten Sie den Teil zitieren , wo es definiert ist?In C und C ++
Eine vorzeichenlose Ganzzahl, die n Bits enthält, kann einen Wert zwischen 0 und (2 ^ n-1) haben, was 2 ^ n verschiedenen Werten entspricht.
Eine vorzeichenlose Ganzzahl ist entweder positiv oder Null.
Vorzeichenbehaftete Ganzzahlen werden in einem Computer unter Verwendung des Zweierkomplements gespeichert.
quelle
Bring meine Antwort von einer anderen Frage .
Aus der C-Spezifikation , Abschnitt 6.7.2:
Dies bedeutet, dass
unsigned
der Typ standardmäßig auf gesetzt wird, wenn er nicht angegeben wirdunsigned int
. Schreibenunsigned a
ist also dasselbe wieunsigned int a
.quelle
Nach C17 6.7.2 §2:
Also im Falle von können
unsigned int
wir entweder schreibenunsigned
oderunsigned int
oder wenn wir uns verrückt fühlen ,int unsigned
. Letzteres, da der Standard so dumm ist, dass "... in beliebiger Reihenfolge auftreten kann, möglicherweise vermischt". Dies ist ein bekannter Sprachfehler.Richtiger C-Code verwendet
unsigned int
.quelle