Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


3.2.3b Constantes enteras

§1 Sinopsis

Las constantes enteras representan un int, y pueden estar expresadas en los sistemas de numeración decimal ; octal o hexadecimal .  En ausencia de ningún sufijo , el tipo de una constante entera se deduce de su valor según se muestra en las tablas que siguen. Observe que las reglas para las constantes decimales son distintas del resto.

§2 Decimal

Se permiten constantes enteras en formato decimal (base 10, 2.2.4b) dentro del rango 0 a 4,294,967,295; las que excedan este límite serán truncadas.  Observe que las constantes decimales no pueden comenzar con cero, porque serían interpretadas como octales.

int i = 10;  // decimal 10

int i = 010; // decimal 8 (octal 10)

int i = 0;   // decimal 0 = octal 0


  Tipos adoptados por las constantes decimales en función del valor declarado (en ausencia de sufijos L o U)

0                    a 32,767             int

32,768            a 2,147,483,647  long

2,147,483,648 a 4,294,967,295  unsigned long

>4294967295                            truncado

§3 Octal

Todas las constantes que empiecen por cero se suponen en octal (base 8, 2.2.4b).  Si una constante de este tipo contiene dígitos ilegales (8 o 9), se produce un mensaje de error; como se indica en la tabla adjunta, las que exceden del valor máximo 037777777777 son truncadas.

  Tipos adoptados por las constantes Octales en función del valor declarado (en ausencia de sufijos L o U).

00                    a 077777             int

010000             a 0177777           unsigned int

02000000         a  017777777777   long

020000000000  a  037777777777   unsigned long

> 037777777777                           truncado

§4 Hexadecimal

Cualquier constante que comience por 0x o 0X es considerada hexadecimal [1], base 16 ( 2.2.4b), después se pueden incluir los dígitos válidos (0...9, a...f, A...F).  Como se indica e el cuadro adjunto, las que excedan del valor máximo 0xFFFFFFFF son truncadas.

  Tipos adoptados por las constantes hexadecimales en función del valor declarado (en ausencia de sufijos L o U).

0x0000          a 0x7FFF          int

0x8000          a 0xFFFF          unsigned int

0x10000        a 0x7FFFFFFF    long

0x80000000   a 0xFFFFFFFF  unsigned long

>0xFFFFFFFF                       truncado

Ejemplo:

long lg1 = 0xFFFF;  lg2 = 0xFF;

cout << lg1 << endl;            // -> 65535

cout << lg2 << endl;            // -> 255

#define CS_VREDRAW 0x0001

#define CS_HREDRAW 0x0002

§5 Sufijos: long (L) y unsigned (U)

La adición de sufijos en la definición de una constante puede forzar que esta sea de un tipo específico, así pues, los sufijos funcionan como una especie de "casting" para las constantes. Se utilizan las letras U u L l. Estos sufijos se pueden utilizar juntos y en cualquier orden o grafía (ul, lu, Ul, lU, uL, Lu, LU o UL).

Los sufijos L / l después de una constante la fuerzan a ser declarada como long. Ejemplo:

const x = 7L;   // x es long

Los sufijos U / u la fuerzan a que sea declarada como unsigned;  en este caso, con independencia de la base utilizada, la constante será considerada unsigned long si el valor del número es mayor que el decimal 65,535. Ejemplo:

const x = 7U;      // x es unsigned int

const y = 66000U;  // y es unsigned long


En ausencia de alguno de estos sufijos el tipo de la constante es el primero de los que se señalan que pueda albergar su valor.

Decimal:           int, long int, unsigned long int

Octal:               int, unsigned int, long int, unsigned long int

Hexadecimal:    int, unsigned int, long int, unsigned long int


Si la constante tiene un sufijo U o u, su tipo es unsigned int, unsigned long o int (el primero que pueda albergar el valor).

  Si tiene un sufijo L o l, su tipo es long int o unsigned long int (el primero que pueda albergar el valor).

  Si la constante tiene ambos sufijos, u e l (ul, lu, Ul, lU, uL, Lu, LU o UL), su tipo de es unsigned long int. Ejemplo:

const z = 0UL;   // z es unsigned long


Como puede verse, las constantes enteras sin L o U compendian la representación de constantes enteras en cualquiera de los tres sistemas de numeración (en C++Builder).

Nota: algunos compiladores utilizan los sufijos ll/LL y ull/ULL para referirse a los enteros extendidos ( 3.2.3d) long long y unsigned long long respectivamente.

  Inicio.


[1]  Sin embargo, como se verá más adelante, en secuencias de escape ( 3.2.3e), no es necesario \0x para indicar un valor hexadecimal; es suficiente con poner  \x ó \X.