907 palabras
5 minutos
Literales (en C)

Tabla de contenido#


Artículo previo: Sinónimos de un tipo (en C)

NOTA

Esta información fue principalmente extraída del libro C/C++ Curso de programación (2ª ed.), escrita por Fco. Javier Ceballos (páginas 29-32).

Un literal es la expresión de un valor de un tipo primitivo, o bien de una cadena de caracteres (conjunto de caracteres entre comillas dobles). Por ejemplo, son literales: 5, 3.14, 'a', y "hola". En realidad son valores constantes.

Según lo expuesto, un literal en C puede ser: un entero, un real, un carácter y una cadena de caracteres.

Literales enteros#

El lenguaje C permite especificar un literal entero en base 10, 8 y 16.

En general, el signo + es opcional si el valor es positivo y el signo - estará presente siempre que el valor sea negativo. El tipo de un literal entero depende de su base, de su valor y de su sufijo. La sintaxis para especificar un literal entero es:

{[+]|-}literal_entero[{L|U|UL}]

Si el literal es decimal y no tiene sufijo, su tipo es el primero de los tipos int, long int o unsigned long int en el que su valor pueda ser representado.

Si es octal o hexadecimal y no tiene sufijo, su tipo es el primero de los tipos int, unsigned int, long int, unsigned long int en el que su valor pueda ser representado.

También se puede indicar explícitamente el tipo de un literal entero, añadiendo los sufijos L, U o UL (mayúsculas o minúsculas).

Si su sufijo es L, su tipo es long cuando el valor puede ser representado en este tipo, si no es unsigned long. Si el sufijo es U, su tipo es unsigned int cuando el valor puede ser representado en este tipo, si no es unsigned long. Si el sufijo es UL, su tipo es unsigned long.

Un literal entero decimal puede tener uno o más dígitos del 0 al 9, de los cuales el primero de ellos es distinto de 0. Por ejemplo:

4326constante entera int
1522Uconstante entera unsigned int
1000Lconstante entera long
325ULconstante entera unsigned long

Un literal entero octal puede tener uno o más dígitos del 0 al 7, precedidos por un 0. Por ejemplo:

0326constante entera int en base 8

Un literal entero hexadecimal puede tener uno o más dígitos del 0 al 9 y letras de la A a la F (en mayúsculas o minúsculas) precedidos por 0x o 0X (cero seguido de x). Por ejemplo:

256número decimal 256
0400número decimal 256 expresado en octal
0x100número decimal 256 expresado en hexadecimal
-0400número decimal -256 expresado en octal
-0x100número decimal -256 expresado en hexadecimal

Literales reales#

Un literal real está formado por una parte entera, seguido por un punto decimal, y una parte fraccionaria. También se permite la notación científica, en cuyo caso se añade al valor una e o E, seguida por un exponente positivo o negativo.

{[+]|-}parte-entera.parte-fraccionaria[{e|E}{[+]|-}exponente]

donde exponente representa cero o más dígitos del 0 al 9 y E o e es el símbolo de exponente de la base 10 que puede ser positivo o negativo (2E−5 = 2 × 10-5 ). Si la constante real es positiva no es necesario especificar el signo y si es negativa lleva el signo menos (−). Por ejemplo:

-17.24
17.244283
.008e3
27E-3

Un literal real tiene siempre tipo double, a no ser que se añada al mismo una f o F, en cuyo caso será de tipo float. Por ejemplo:

17.24F /* constante real de tipo float */

Literales de un solo carácter#

Los literales de un solo carácter son de tipo char. Este tipo de literales está formado por un único carácter encerrado entre comillas simples. Una secuencia de escape es considerada como un único carácter. Algunos ejemplos son:

' 'espacio en blanco
'x'letra minúscula x
'\n'retorno de carro más avance de línea
'\x07'pitido
'\1B'carácter ASCII Esc

El valor de una constante de un solo carácter es el valor que le corresponde en el juego de caracteres de la máquina.

Literales de cadena de caracteres#

Un literal de cadena de caracteres es una secuencia de caracteres encerrados entre comillas dobles (incluidas las secuencias de escape como \"). Por ejemplo:

"Esto es una constante de caracteres"
"3.1415926"
"Paseo de Pereda 10, Santander"
""                              /* cadena vacía */
"Lenguaje \"C/C++\""            /* produce: Lenguaje "C/C++" */

En el ejemplo siguiente el carácter \n fuerza a que la cadena “O pulse Entrar” se escriba en una línea:

printf("Escriba un número entre 1 y 5\nO pulse Entrar");

Cuando una cadena de caracteres es demasiado larga puede utilizarse el carácter \ como carácter de continuación. Por ejemplo:

printf("Esta cadena de caracteres es dema\[Entrar]
siado larga.\n");

El ejemplo anterior daría lugar a una sola línea como la siguiente:

Esta cadena de caracteres es demasiado larga.

Dos o más cadenas separadas por un espacio en blanco serían concatenadas en una sola cadena. Por ejemplo:

printf("Primera cadena, "
"segunda cadena.\n");

El ejemplo anterior daría lugar a una sola cadena:

Primera cadena, segunda cadena.

Los caracteres de una cadena de caracteres son almacenados en localizaciones sucesivas de memoria. Cada carácter ocupa un byte y una cadena de caracteres es finalizada automáticamente por el carácter nulo representado por la secuencia de escape \0. Por ejemplo, la cadena "hola" sería representada en memoria así:

h o l a \0

Siguiente artículo: Identificadores, palabras clave y comentarios (en C)