¿La palabra clave sin firmar tiene por defecto un tipo de datos específico en C ++? Estoy tratando de escribir una función para una clase para el prototipo:
unsigned Rotate(unsigned object, int count)
Pero realmente no entiendo lo que unsigned
significa. ¿No debería ser como unsigned int
o algo así?
Tipos de enteros:
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
Tenga cuidado con el carbón:
char (is signed or unsigned depending on the implmentation) signed char unsigned char
fuente
Sí, con y sin firmar también se pueden usar como especificadores de tipo independientes
Los tipos de datos enteros char, short, long e int pueden estar firmados o sin firmar, dependiendo del rango de números necesarios para representarlos. Los tipos con signo pueden representar valores positivos y negativos, mientras que los tipos sin signo solo pueden representar valores positivos (y cero).
Un entero sin signo que contiene n bits puede tener un valor entre 0 y 2 n - 1 (que son 2 n valores diferentes).
Sin embargo, firmado y sin firmar también se pueden usar como especificadores de tipo independientes, lo que significa lo mismo que con int firmado y unsigned int respectivamente. Las siguientes dos declaraciones son equivalentes:
unsigned NextYear; unsigned int NextYear;
fuente
short
ylong
también son modificadores de tipo . Si escribeshort s
, eso significa en realidadshort int s
, como enunsigned u
realidad significaunsigned int u
. (yunsigned short
mediosunsigned short int
)Puede leer sobre la palabra clave unsigned en la Referencia de C ++ .
Hay dos tipos diferentes en este asunto, firmados y no firmados. El valor predeterminado para los números enteros está firmado, lo que significa que pueden tener valores negativos.
En un sistema de 32 bits, un número entero es de 32 bits, lo que significa que puede contener un valor de ~ 4 mil millones.
Y cuando se firma, esto significa que debe dividirlo, dejando -2 mil millones a +2 mil millones.
Sin embargo, cuando no está firmado, el valor no puede contener números negativos, por lo que para los números enteros esto significaría de 0 a +4 mil millones.
Hay un poco más de información sobre esto en Wikipedia .
fuente
Sí, eso significa
unsigned int
. Solía ser que si no especificaba un tipo de datos en C, había muchos lugares donde simplemente asumíaint
. Este fue el intento, por ejemplo, de tipos de retorno de función.Esta verruga se ha erradicado en su mayoría, pero aquí se encuentran sus últimos vestigios. En mi humilde opinión, el código debe arreglarse para
unsigned int
evitar el tipo de confusión que está experimentando.fuente