He visto este unsigned
tipo "sin tipo" usado un par de veces, pero nunca vi una explicación para ello. Supongo que hay un signed
tipo correspondiente . He aquí un ejemplo:
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;
}
Lo que he recopilado hasta ahora:
- en mi sistema, sizeof(unsigned) = 4
(insinúa un int sin firmar de 32 bits)
- podría usarse como una forma abreviada para lanzar otro tipo a la versión sin firmar:
signed long int i = -42;
printf("%u\n", (unsigned)i);
¿Es ANSI C o simplemente una extensión del compilador?
long
en lugar delong int
es muy común, por lo que no estoy seguro de por qué enunsigned
lugar deunsigned int
no sería aceptable.en C,
unsigned
es un atajo paraunsigned int
.Tienes lo mismo para
long
eso es un atajo paralong int
Y también es posible declarar un
unsigned long
(será ununsigned long int
).Esto está en el estándar ANSI
fuente
unsigned
es lo mismo queunsigned int
pero hice una búsqueda en el Borrador del Comité WG14 / N1124 - 6 de mayo de 2005 ISO / IEC 9899: TC2 paraunsigned
y no pude encontrar dónde está definido ... ¿podría citar la parte donde está definido?En C y C ++
unsigned = unsigned int (Integer type) signed = signed int (Integer type)
Un entero sin signo que contiene n bits puede tener un valor entre 0 y (2 ^ n-1), que es 2 ^ n valores diferentes.
Un entero sin signo es positivo o cero.
Los enteros con signo se almacenan en una computadora usando el complemento de 2.
fuente
Según C17 6.7.2 §2:
Por lo que en caso de
unsigned int
que cualquiera puede escribirunsigned
ounsigned int
, o si estamos sintiendo loco,int unsigned
. Esto último, dado que el estándar es lo suficientemente estúpido como para permitir "... puede ocurrir en cualquier orden, posiblemente entremezclados". Este es un defecto conocido del idioma.Apropiados utiliza código C
unsigned int
.fuente
Trayendo mi respuesta de otra pregunta .
De la especificación C , sección 6.7.2:
Lo que significa que
unsigned
, cuando no se especifica el tipo, será predeterminadounsigned int
. Entonces escribirunsigned a
es lo mismo queunsigned int a
.fuente