He visto este unsignedtipo "sin tipo" usado un par de veces, pero nunca vi una explicación para ello. Supongo que hay un signedtipo 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?

longen lugar delong intes muy común, por lo que no estoy seguro de por qué enunsignedlugar deunsigned intno sería aceptable.en C,
unsignedes un atajo paraunsigned int.Tienes lo mismo para
longeso es un atajo paralong intY también es posible declarar un
unsigned long(será ununsigned long int).Esto está en el estándar ANSI
fuente
unsignedes lo mismo queunsigned intpero hice una búsqueda en el Borrador del Comité WG14 / N1124 - 6 de mayo de 2005 ISO / IEC 9899: TC2 paraunsignedy 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 intque cualquiera puede escribirunsignedounsigned 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 aes lo mismo queunsigned int a.fuente