Secuencias de escape
El carácter barra invertida tiene varios usos. El primero es que si está seguido de un carácter no alfanumérico, toma cualquier significado especial que el carácter pueda tener. Este uso de la barra invertida como carácter de escape se aplica tanto dentro como fuera de las clases carácter.
Por ejemplo, si quiere coincidir un carácter "*", escriba "\*" en el patrón. Esto se aplica aunque el siguiente carácter pudiera ser interpretado como un metacarácter, por lo que es mejor asegurarse de preceder un carácter no alfanumérico con "\" para especificar que éste se representa a sí mismo. En particular, si quiere coincidir una barra invertida, escriba "\\".
Nota:
Las cadenas PHP entre comillas simples y dobles tienen un significado especial para la barra invertida. Así, si \ ha de ser comparado con una expresión regular \\, entonces se debe usar "\\\\" o '\\\\' en código PHP.
Si un patrón es compilado con la opción PCRE_EXTENDED, los espacios en blanco en el patrón (distinto de una clase carácter) y los caracteres entre un "#" fuera de una clase carácter y el siguiente carácter de nueva línea se ignoran. Una barra invertida de escape se puede usar para incluir un carácter espacio en blanco o "#" como parte del patrón.
Un segundo uso de la barra invertida proporciona una manera de codificar caracteres no imprimibles en patrones de una forma visible. No hay restricciones en la aparición de los caracteres no imprimibles, excepto para el cero binario el cual finaliza el patrón, pero cuando un patrón está siendo preparado para edición de texto, normalmente es más fácil usar una de las siguientes secuencias de escape en vez del carácter binario que representan:
- \a
- alarma, es decir, el carácter BEL (07 hex)
- \cx
- "control-x", donde x es cualquier carácter
- \e
- escape (1B hex)
- \f
- salto de página (0C hex)
- \n
- nueva línea (0A hex)
- \p{xx}
- un carácter con la propiedad xx, véase propiedades unicode para más información
- \P{xx}
- un carácter sin la propiedad xx, véase propiedades unicode para más información
- \r
- retorno de carro (0D hex)
- \t
- tabulador (09 hex)
- \xhh
- carácter con el código hexadecimal hh
- \ddd
- carácter con el código octal ddd, o retroreferencia
El efecto exacto de "\cx" es como sigue: si "x" es una letra minúscula, ésta se convierte a mayúscula. Después se invierte el bit 6 del carácter (40 hex). Así, "\cz" se convierte en 1A hex, pero "\c{" se convierte en 3B hex, mientras que "\c;" se conviente en 7B hex.
Después de "\x", se leen hasta dos dígitos hexadecimales (las letras pueden ser tanto mayúsculas como minúsculas). En modo UTF-8, "\x{...}" es permitido, donde el contenido entre las llaves es una cadena de dígitos hexadecimales. Esto se interpreta como un carácter UTF-8 cuyo número de código es el dado por el número hexadecimal. La secuencia de escape hexadecimal original, \xhh, conincide con un carácter UTF-8 de dos bytes si el valor es mayor que 127.
Después de "\0", se leen hasta dos dígitos octales más. En cualquier caso, si hay menos de dos dígitos, sólo se usan aquéllos que están presentes. Así, la secuencia "\0\x\07" especifica dos ceros binarios seguidos de un carácter BEL. Asegúrese de proporcionar dos dígitos después del cero inicial si el carácter que sigue es también un dígito octal.
El manejo de una barra invertida seguida de un dígito distinto de 0 es complicado. Fuera de una clase carácter, PCRE lee este dígito, así como cualesquiera dígitos siguientes, como un número decimal. Si el número es menor que 10, o si ha habido al menos tantas capturas previas hacia la izquierda en la expresión, la secuencia entera es tomada como una retroreferencia. Una descripción de cómo funciona esto se da más adelante, seguido de una discusión sobre sub-patrones entre paréntesis.
Dentro de una clase carácter, o si el número decimal es mayor que 9 y no han habido tantos sub-patrones de captura, PCRE relee hasta tres dígitos octales siguientes a la barra invertida, y genera un sólo byte de los 8 bits menos significativos del valor. Cualesquiera dígitos subsiguientes se representan a sí mismos. Por ejemplo:
- \040
- es otra manera de escribir un espacio
- \40
- es lo mismo, siempre que haya menos de 40 sub-patrones de captura previos
- \7
- es siempre una retroreferencia
- \11
- puede ser una retrorefenrencia, u otra manera de escribir una tabulación
- \011
- es siempre una tabulación
- \0113
- es una tabulación seguida del carácter "3"
- \113
- es el carácter con el código octal 113 (ya que no puede haber más de 99 retroreferencias)
- \377
- es un byte consistente en bits 1 enteramente
- \81
- es tanto una retroreferencia como un cero binario seguido de los caracteres "8" y "1"
Observe que los valores octales 100 y mayores no deben ser precedidos por un cero inicial, ya que nunca se leen más de tres dígitos octales.
Todas las secuencias que definen un valor de byte único se pueden usar tanto dentro como fuera de las clases carácter. Además, dentro de una clase carácter, la secuencia "\b" se interpreta como el carácter retroceso (08 hex). Fuera de una clase carácter tiene diferentes significados (véase más abajo).
El tercer uso de la barra invertida es parar especificar tipos de caracteres genéricos:
- \d
- cualquier dígito decimal
- \D
- cualquier carácter que no es un dígito decimal
- \h
- cualquier carácter espacio en blanco horizontal (desde PHP 5.2.4)
- \H
- cualquier carácter que no es un carácter espacio en blanco horizontal (desde PHP 5.2.4)
- \s
- cualquier carácter espacio en blanco
- \S
- cualquier carácter que no es un carácter espacio en blanco
- \v
- cualquier carácter espacio en blanco vertical (desde PHP 5.2.4)
- \V
- cualquier carácter que no es un carácter espacio en blanco vertical (desde PHP 5.2.4)
- \w
- cualquier carácter "palabra"
- \W
- cualquier carácter que no es "palabra"
Cada par de sencuencias de escape divide el conjunto completo de caracteres en dos conjuntos separados. Cualquier carácter dado concide con uno, y sólo uno, de cada par.
Un carácter "palabra" es cualquier letra o dígito o el carácter subrayado, es decir, cualquier carácter que pueda ser parte de una "palabra" Perl. La definición de letras y dígitos está controlada por las tablas de caracteres de PCRE, y pueden variar si tiene lugar la comparación de configuraciones regionales específicas. Por ejemplo, en la configuración regional "fr" (Francés), algunos códigos de caracteres mayores que 128 se usan para letras acentuadas, y éstos se comparan por\w.
Estas secuencias de tipo de caracteres puede aparecer tanto dentro como fuera de las clases carácter. Cada una coincide con un carácter del tipo apropiado. Si el punto de coincidencia actual está al final de la cadena objetivo, todas ellas fallarán, ya que no hay caracteres a comparar.
El cuarto uso de la barra invertida es para ciertas declaraciones simples. Una declaración especifica una condición que se debe encontrar en un punto particular de una comparación, sin consumir ningún carácter de la cadena objetivo. El uso de sub-patrones para declaraciones más complicadas se describe después. Las declaraciones de la barra invertida son
- \b
- límite de palabra
- \B
- distinto a límite de palabra
- \A
- comienzo del sujeto (independientemente del modo multilínea)
- \Z
- fin del sujeto o nueva línea al final (independientemente del modo multilínea)
- \z
- final del sujeto (independientemente del modo multilínea)
- \G
- primera posición de coincidencia del sujeto
Estas declaraciones pueden no aparecer en clases carácter (pero observe que "\b" tiene un significado diferente, a saber, el carácter retroceso, dentro de una clase carácter).
Un límite de palabra es una posición en la cadena objetivo donde el carácter actual y el carácter previo no coinciden con \w o \W (es decir, uno coincide con \wy el otro coincice con \W), o el inicio o final de la cadena si el primer o último carácter coincide con \w, respectivamente.
Las declaraciones \A, \Z, y \z difieren de los tradicionales circumflejo y dólar (descritos después) de modo que siempre coinciden con el inicio y final absolutos de la cadena objetivo, sin importar las opciones que se apliquen. No les afectan las opciones PCRE_MULTILINE o PCRE_DOLLAR_ENDONLY. La diferencia entre\Z y \z es que \Z coincide antes de una nueva línea que es el último carácter de la cadena, además de al final de la cadena, mientras que \z coincide sólo con el final.
La declaración \G es verdadera sólo cuando la posición de comparación actual está al principio del punto de coincidencia, tal como se especifica en el argumento
offset de preg_match(). Difiere de \A cuando el valor de offset no es cero.
Se puede usar \Q y \E para ignorar metacaracteres de expresiones regulares. Por ejemplo: \w+\Q.$.\E$ coincidirá con uno o más caracteres palabra, seguidos por los literales .$. y anclados al final de la cadena.
A partir de PHP 5.2.4, \K se puede usar para reiniciar el comienzo de comparación. Por ejemplo, el patrón foo\Kbar coincide con "foobar", pero informa de que ha coincidido con "bar". El uso de \K no interfiere con el parámetro de las cadenas capturadas. Por ejemplo, cuando el patrón (foo)\Kbar coincide con "foobar", la primera sub-cadena está establecida aún a "foo".
Las secuencias de caracteres en las que el primero es la barra invertida, se denominaron secuencias de escape y aunque originariamente se utilizaron para la representación de los caracteres de control, por extensión pueden representarse de este modo todos los códigos ASCII. Además se dispone de algunos símbolos predefinidos para los caracteres más frecuentes. Por ejemplo,\n se utiliza para representar el carácter nueva línea (decimal 10). Los símbolos utilizados se muestran en la tabla adjunta.
EjemploSecuencia Valor Símbolo Descripción\a 0x07 BEL Sonido audible\b 0x08 BS Retroceso\f 0x0C FF Salto de formato\n 0x0A LF Saltar una línea\r 0x0D CR Retorno de carro\t 0x09 HT Tabulación horizontal\v 0x0B VT Tabulación vertical\\ 0x5c \ Barra invertida\' 0x27 ' Apóstrofo\" 0x22 " Doble comilla\? 0x3F ? Interrogación\O cualquiera cualquiera O = cadena de hasta tres dígitos octales\xH cualquiera cualquiera H = cadena de dígitos hexadecimales\XH cualquiera cualquiera H = cadena de dígitos hexadecimales
char campana = '\a'; // carácter ASCII 7
cout << campana << endl; // genera un sonido audible
§3 La barra invertida ( \ ) se utiliza junto con números octales o hexadecimales para representar símbolos ASCII , incluyendo los denominadoscaracteres de control (también llamados caracteres no imprimibles) que no tienen representación directa en ningún carácter.
En una secuencia de escape se pueden utilizar hasta tres caracteres en octal o cualquier número de caracteres en hexadecimal. Siempre que los valores estén dentro del rango legal para el tipo char (de 0 a 0xff para C++Builder).
§3.1 Octal
§3.2 HexadecimalRango: \0 a \377Ejemplos:
\0 Carácter nulo (fin de cadena) \03 Ctr-C \07 Bell \013 Vertical TAB \077 ?
§4 Los números mayores que los indicados generan un error de compilación:Rango \x00 a \xFFEjemplos:
\0 Carácter nulo (fin de cadena) \x3 Ctr-C \x7 Bell \xB Vertical TAB \x3F ?
Numeric constant too large. Por ejemplo, el octal \777 es mayor que el máximo permitido (\377), por lo que produciría un error. El primer carácter no octal o no hexadecimal que se encuentre en una secuencia octal o hexadecimal respectivamente, señala el final de la secuencia de escape. Por ejemplo:
printf("\x072.1Un Sistema Operativo");
La sentencia anterior debería ser interpretada como el hexadecimal \x07 (BEL) y2.1 Un Sistema Operativo, aunque quizás el compilador lo interprete como hexadecimal \x072 (el carácter "r") y la cadena literal .1Un sistema Operativo. Para evitar este tipo de ambigüedades debe escribirse:
printf("\x07" "2.1Un Sistema Operativo");
También pueden darse ambigüedades si una secuencia de escape en octal es seguida por un número no octal. Por ejemplo, dado que los dígitos 8 y 9 no son octales válidos, la constante \258 puede ser interpretada como una constante de dos caracteres \25 (Ctrl-U) y un 8.§5 Trigrafos
Con la extensión de la informática a países distintos del ámbito anglosajón, se presentaba con frecuencia el problema de tener que escribir determinados caracteres del lenguaje C++ (Us-ASCII) que no estaban presentes en determinados teclados. Por ejemplo, en la mayoría de teclados en Español, no existe la tilde ~ como un carácter independiente, lo que no es inconveniente para la escritura normal, ya que la única ocurrencia en este signo en Español es en la letra eñe "Ñ" que sí dispone de su correspondiente tecla. Pero la referida ausencia de la tilde como símbolo independiente, resulta una molestia para los programadores, ya que el fuente requiere en ocasiones incluir dicho símbolo. Para resolver el problema se adoptó el convenio que estos caracteres conflictivos podían representarse en el código fuente mediante parejas y ternas de caracteres, los denominados dígrafos y trígrafos, que se muestran en la tabla adjunta.Trígrafo Carácter Dígrafo??= # %:??( [ <:??) ] :>??/ \??' ^??< { <%??> } %>??! |??- ~
Nota: la interpretación de estos trígrafos retarda considerablemente la acción del compilador, por lo que Borland C++ incluye un traductor específico, el programa trigraph.exe, que puede traducir el código fuente antes de la compilación.
| Tipo de dato | Sinónimos | Tamaño | Descripción |
|---|---|---|---|
| BINARY | VARBINARY BINARY VARYING BIT VARYING | 1 byte por carácter | Se puede almacenar cualquier tipo de datos en un campo de este tipo. Los datos no se traducen (por ejemplo, a texto). La forma en que se introducen los datos en un campo binario indica cómo aparecerán al mostrarlos. |
| BIT | BOOLEAN LOGICAL LOGICAL1 YESNO | 1 byte | Valores Sí y No, y campos que contienen solamente uno de dos valores. |
| TINYINT | INTEGER1 BYTE | 1 byte | Un número entero entre 0 y 255. |
| COUNTER | AUTOINCREMENT | Se utiliza para campos contadores cuyo valor se incrementa automáticamente al crear un nuevo registro. | |
| MONEY | CURRENCY | 8 bytes | Un número entero comprendido entre – 922.337.203.685.477,5808 y 922.337.203.685.477,5807. |
| DATETIME | DATE TIME | 8 bytes | Una valor de fecha u hora entre los años 100 y 9999 |
| UNIQUEIDENTIFIER | GUID | 128 bits | Un número de identificación único utilizado con llamadas a procedimientos remotos. |
| DECIMAL | NUMERIC DEC | 17 bytes | Un tipo de datos numérico exacto con valores comprendidos entre 1028 - 1 y - 1028 - 1. Puede definir la precisión (1 - 28) y la escala (0 - precisión definida). La precisión y la escala predeterminadas son 18 y 0, respectivamente. |
| REAL | SINGLE FLOAT4 IEEESINGLE | 4 bytes | Un valor de coma flotante de precisión simple con un intervalo comprendido entre – 3,402823E38 y – 1,401298E-45 para valores negativos, y desde 1,401298E-45 a 3,402823E38 para valores positivos, y 0. |
| FLOAT | DOUBLE FLOAT8 IEEEDOUBLE NUMBER | 8 bytes | Un valor de coma flotante de precisión doble con un intervalo comprendido entre – 1,79769313486232E308 y – 4,94065645841247E-324 para valores negativos, y desde 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos, y 0. |
| SMALLINT | SHORT INTEGER2 | 2 bytes | Un entero corto entre – 32.768 y 32.767. |
| INTEGER | LONG INT INTEGER4 | 4 bytes | Un entero largo entre – 2.147.483.648 y 2.147.483.647. |
| IMAGE | LONGBINARY GENERAL OLEOBJECT | Lo que se requiera | Desde cero hasta un máximo de 2.14 gigabytes. Se utiliza para objetos OLE. |
| TEXT | LONGTEXT LONGCHAR MEMO NOTE NTEXT | 2 bytes por carácter. (Consulte las notas). | Desde cero hasta un máximo de 2.14 gigabytes. |
| CHAR | TEXT(n) ALPHANUMERIC CHARACTER STRING VARCHAR CHARACTER VARYING NCHAR NATIONAL CHARACTER NATIONAL CHAR NATIONAL CHARACTER VARYING NATIONAL CHAR VARYING | 2 bytes por carácter. (Consulte las notas). | Desde cero a 255 caracteres. |
Los tipos de datos en C++ se clasifican en primitivos y derivados.
Los tipos de datos primitivos son los que están definidos dentro del lenguaje.
Los tipos de datos derivados se forman a partir de los tipos primitivos.
En este tema veremos los tipos primitivos y en temas siguientes estudiaremos los tipos derivados.
Los tipos de datos primitivos en C++ son: numéricos enteros, numéricos reales, tipo lógico y tipo carácter ampliado.
Tipos de datos C++ numéricos enteros
El tipo de dato numérico entero es un subconjunto finito de los números enteros del mundo real. Pueden ser positivos o negativos.
En C++ los tipos de datos numéricos enteros son los siguientes:
Tipo de Dato
|
Descripción
|
Número de bytes típico
|
Rango
|
short
|
Entero corto
|
2
|
-32768 a 32767
|
int
|
Entero
|
4
|
-2147483648 a +2147483647
|
long
|
Entero largo
|
4
|
-2147483648 a +2147483647
|
char
|
Carácter
|
1
|
-128 a 127
|
Con los tipos enteros pueden utilizarse los calificadores signed y unsigned. Estos calificadores indican si el número tiene signo o no. Si se usan solos, sin indicar el tipo de dato se asume int.
Por ejemplo, las siguientes declaraciones son equivalentes:
unsigned int x; equivale a: unsigned x;
Usando estos calificadores podemos tener los siguientes tipos enteros:
Tipo de Dato
|
Descripción
|
Número de bytes típico
|
Rango
|
signed short
|
Entero corto
|
2
|
-32768 a 32767
|
unsigned short
|
Entero corto sin signo
|
2
|
0 a 65535
|
signed int
|
Entero
|
4
|
-2147483648 a +2147483647
|
unsigned int
|
Entero sin signo
|
4
|
0 a 4294967295
|
signed long
|
Entero largo
|
4
|
-2147483648 a +2147483647
|
unsigned long
|
Entero largo sin signo
|
4
|
0 a 4294967295
|
signed char
|
Carácter
|
1
|
-128 a 127
|
unsigned char
|
Carácter sin signo
|
1
|
0 a 255
|
Podemos ver que los datos enteros de tipo signed son equivalentes a los enteros sin utilizar el calificador:
signed int a; es equivalente a escribir int a;
Tipos de datos numéricos reales
El tipo de dato numérico real es un subconjunto finito de los números reales. Pueden ser positivos o negativos.
En C++ los tipos de datos numéricos reales son los siguientes:
Tipo de Dato
|
Descripción
|
Número de bytes típico
|
Rango
|
float
|
Real (Número en coma flotante)
|
4
|
Positivos: 3.4E-38 a 3.4E38
Negativos: -3.4E-38 a -3.4E38
|
double
|
Real doble(Número en coma flotante de doble precisión)
|
8
|
Positivos: 1.7E-308 a 1.7E308
Negativos: -1.7E-308 a -1.7E308
|
long double
|
Real doble largo
|
10
|
Positivos: 3.4E-4932 a 1.1E4932
Negativos: -3.4E-4932 a -1.1E4932
|
Tipo lógico
Los datos de este tipo sólo pueden contener dos valores: true ó false (verdadero ó falso).
Si se muestran como enteros, el valor true toma el valor 1 y false el valor 0.
Tipo de Dato
|
Descripción
|
Número de bytes típico
|
Rango
|
bool
|
Dato de tipo lógico
|
1
|
0, 1
|
Tipo carácter extendido
Este tipo se utiliza para representar caracteres UNICODE. Utiliza 2 bytes a diferencia del tipo char que solo utiliza 1.
Tipo de Dato
|
Descripción
|
Número de bytes típico
|
Rango
|
wchar_t
|
Carácter Unicode
|
2
|
0 a 65535
|
bibliografias
http://ejercicioscpp.blogspot.mx/2012/09/tipos-de-datos-en-c.html
http://www.aulaclic.es/sql/a_8_1_1.htm
http://www.zator.com/Cpp/E3_2_3e.htm
No hay comentarios:
Publicar un comentario