the - short c++ para que sirve
Es el literal 0xffffffff int o unsigned en C++ (1)
Según el Párrafo 2.14.2 / 2 de la Norma C ++ 11,
El tipo de un entero literal es el primero de la lista correspondiente en la Tabla 6 en la que se puede representar su valor.
La Tabla 6 informa que para las constantes hexadecimales, el tipo debe ser:
-
int
; o (si no cabe) -
unsigned int
; o (si no cabe) -
long int
; o (si no cabe) -
unsigned long int
; o (si no cabe) -
long long int
; o -
unsigned long long int
.
Suponiendo que su implementación tiene int
32 bits, dado que 0xffffffff
no cabe en un int
, su tipo debe ser unsigned int
. Para una implementación con un int
64 bits, el tipo sería int
.
Observe que si hubiera escrito el mismo literal como una constante decimal , el tipo podría haber sido solo:
-
int
; o (si no cabe) -
long int
; o (si no cabe) -
long long int
.
De acuerdo con esto , los literales enteros sin sufijo de tipo son siempre int
s. Sin embargo, tanto gcc como clang interpretan 0xffffffff
(o cualquier literal que establece explícitamente el bit de signo distinto de usar el -
) como unsigned. ¿Cual es correcta? (de acuerdo con esto los compiladores son)