what the sirve que para long literal initialize following data and 0x17 c++ integer literals

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)