domingo, 6 de octubre de 2013

TIPOS DE DATOS

Secuencias de escape


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 argumentooffset 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.
Secuencia   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
Ejemplo
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  
Rango: \0 a \377
Ejemplos:
\0  Carácter nulo (fin de cadena)
\03 Ctr-C
\07 Bell
\013 Vertical TAB
\077 ?
§3.2  Hexadecimal  
Rango \x00  a \xFF
Ejemplos:
\0 
 Carácter nulo (fin de cadena)
\x3
 Ctr-C
\x7
 Bell
\xB
 Vertical TAB
\x3F
 ?
§4  Los números mayores que los indicados generan un error de compilación: 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 datoSinónimosTamañoDescripción
BINARYVARBINARY
BINARY VARYING
BIT VARYING
1 byte por carácterSe 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.
BITBOOLEAN
LOGICAL
LOGICAL1
YESNO
1 byteValores Sí y No, y campos que contienen solamente uno de dos valores.
TINYINTINTEGER1
BYTE
1 byteUn número entero entre 0 y 255.
COUNTERAUTOINCREMENTSe utiliza para campos contadores cuyo valor se incrementa automáticamente al crear un nuevo registro.
MONEYCURRENCY8 bytesUn número entero comprendido entre
– 922.337.203.685.477,5808 y 922.337.203.685.477,5807.
DATETIMEDATE
TIME
8 bytesUna valor de fecha u hora entre los años 100 y 9999
UNIQUEIDENTIFIERGUID128 bitsUn número de identificación único utilizado con llamadas a procedimientos remotos.
DECIMALNUMERIC
DEC
17 bytesUn 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.
REALSINGLE
FLOAT4
IEEESINGLE
4 bytesUn 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.
FLOATDOUBLE
FLOAT8
IEEEDOUBLE
NUMBER
8 bytesUn 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.
SMALLINTSHORT
INTEGER2
2 bytesUn entero corto entre – 32.768 y 32.767.
INTEGERLONG
INT
INTEGER4
4 bytesUn entero largo entre – 2.147.483.648 y 2.147.483.647.
IMAGELONGBINARY
GENERAL
OLEOBJECT
Lo que se requieraDesde cero hasta un máximo de 2.14 gigabytes.
Se utiliza para objetos OLE.
TEXTLONGTEXT
LONGCHAR
MEMO
NOTE
NTEXT
2 bytes por carácter. (Consulte las notas).Desde cero hasta un máximo de 2.14 gigabytes.
CHARTEXT(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