Blog gratis
Reportar
Editar
¡Crea tu blog!
Compartir
¡Sorpréndeme!
Programación 1
¡Bienvenidos a nuestro Blog! Espero puedan disfrutarlo y aprender. Este será un contacto que podrá superar los límites de tiempo de las horas de clase: aprovéchenlo para construir algo nuevo.
12 de Abril, 2015    LENGUAJE C

03- Datos y tipos de datos

 

Introducción a la Programación

© Fernando Berzal

Datos y tipos de datos

Dato

Representación formal de hechos, conceptos o instrucciones adecuada para su comunicación, interpretación y procesamiento por seres humanos o medios automáticos.

Tipo de dato

Especificación de un dominio (rango de valores) y de un conjunto válido de operaciones a los que normalmente los traductores asocian un esquema de representación interna propio.

Clasificación de los tipos de datos

En función de quién los define:

•Tipos de datos estándar

•Tipos de datos definidos por el usuario

En función de su representación interna:

•Tipos de datos escalares o simples

•Tipos de datos estructurados

 

Codificación de los datos en el ordenador

En el interior del ordenador, los datos se representan en binario. El sistema binario sólo emplea dos símbolos:

0  y 1

•Un bit nos permite representar 2 símbolos diferentes: 0 y 1

•Dos bits nos permiten codificar 4 símbolos: 00, 01, 10 y 11

•Tres bits nos permiten codificar 8 símbolos distintos:

000, 001, 010, 011, 100, 101, 110 y 111

En general, con N bits podemos codificar 2N valores diferentes

 

 


 

 

Si queremos representar X valores diferentes, necesitaremos N bits, donde N es el menor entero mayor o igual que log2 X

Representación de datos de tipo numérico

Representación posicional

Un número se representa mediante un conjunto de cifras, cuyo valor depende de la cifra en sí y de la posición que ocupa en el número NÚMEROS ENTEROS

Ejemplo:

Si utilizamos 32 bits para representar números enteros,  disponemos de 232 combinaciones diferentes de 0s y 1s: 4 294 967 296 valores.

Como tenemos que representar números negativos y el cero,el ordenador será capaz de representar del –2 147 483 648 al +2 147 483 647.

Con 32 bits no podremos representar números más grandes.

¡¡¡ 2 147 483 647 + 1 = –2 147 483 648 !!!

 

NÚMEROS REALES (en notación científica) (+|–) mantisa x 2exponente̊

 El ordenador sólo puede representar un subconjunto de los números reales (números en coma flotante) ̊

 Las operaciones aritméticas con números en coma flotante están sujetas a errores de redondeo.


 

 


Representación de datos de tipo numérico

Representación posicional

Un número se representa mediante un conjunto de cifras,

cuyo valor depende de la cifra en sí y de la posición que

ocupa en el número

NÚMEROS ENTEROS

Ejemplo:

Si utilizamos 32 bits para representar números enteros, disponemos de 2

32 combinaciones diferentes de 0s y 1s:4 294 967 296 valores.

Como tenemos que representar números negativos y el cero,el ordenador será capaz de representar del–2 147 483 648 al +2 147 483 647.

Con 32 bits no podremos representar números más grandes.

Estándar IEEE 754

•Precisión sencilla

(bit de signo + 8 bits exponente + 23 bits mantisa)

•Precisión doble

(bit de signo + 11 bits exponente + 52 bits mantisa)

 

 

Representación de textos

Se escoge un conjunto de caracteres: alfabéticos, numéricos, especiales (separadores y signos de puntuación), gráficos y de control (por ejemplo, retorno de carro).

Se codifica ese conjunto de caracteres utilizando n bits.

Por tanto, se pueden representar hasta 2n símbolos distintos.

Ejemplos de códigos normalizados ASCII  (American Standard Code for Information Interchange)

- ANSI X3.4-1968, 7 bits (128 símbolos)- ISO 8859-1 = Latin-1, 8 bits (256 símbolos)


 

 

 

UNICODE, ISO/IEC 10646, 16 bits (65536 símbolos)


 

 

 

Tipos de datos

Primitivos  en C El lenguaje ANSI C define 6 tipos de datos básicos que pueden ir acompañados de modificadores

Tipos de datos básicos

Char Caracteres

Int Números enteros

Float Números en coma flotante (32 bits)

Double Números en coma flotante de doble precisión (64 bits)

void Tipo nulo

Punteros Direcciones de memoria

 

 

Modificadores

Tamaño del dato

 short (int por defecto)

long (int por defecto)

 

Signo

Aplicable a los tipos char, short, int y long

Signed (con signo)

Unsigned (sin signo)

Modo de almacenamiento

No se suele usar

register

Auto (por defecto)

Static

Extern

 

 

Números enteros

[unsigned] char, [unsigned] short, [unsigned] long

6 tipos básicos para representar números enteros:

-3 con signo: char, short, long

-3 sin signo: unsigned (char | short | long)

 

 

int

El tipo de dato int es equivalente

-al tipo de dato short en compiladores de 16 bits

- al tipo de dato long en compiladores de 32 bits

unsigned int

El tipo de dato unsigned int es equivalente

-al tipo de dato unsigned short en compiladores de 16 bits



-al tipo de dato unsigned long en compiladores de 32 bits

Literales enteros

Los literales enteros pueden expresarse:

-En decimal (base 10):

255

-En octal (base 8), con el prefijo 0:

0377( 3·82 + 7·81 + 7 = 255 )

-En hexadecimal (base 16), con el prefijo 0x

0x:0xff ( 15*161 + 15 = 255)

 

Los literales enteros son de tipo int por defecto

 

Un literal entero es de tipo long si va acompañado del sufijo 1 o 1:

123456789L es de tipo long

NOTA: Se prefiere el uso de L porque l(L minúscula) puede confundirse con 1 (uno).

 

Un literal entero unsigned debe ir acompañado del sufijo u o U:


123456789uL es de tipo unsigned long

 

 

Operaciones con números enteros

Desbordamiento

Si sobrepasamos el valor máximo que se puede representar con  un tipo de dato entero, nadie nos avisa de ello: en la ejecución de nuestro programa obtendremos un resultado incorrecto.


 

 


Para obtener el resultado correcto, hemos de tener en cuenta el rango de valores de cada tipo de dato, de tal forma que los resultados intermedios de un cálculo siempre puedan representarse correctamente:

 

 

 

 

División por cero

Si dividimos un número entero por cero, se produce un error en tiempo de ejecución:

Divide error

La ejecución del programa termina de forma brusca al intentar hacer la división por cero.

 

Números en coma flotante

float, double, long double

El estándar ANSI C no establece su representación física


 

 

Literales reales

-Cadenas de dígitos con un punto decimal

123.45   0.0          .001

-En notación científica (mantisa·10 exponente)

123e45  123E+451E-6

Por defecto, los literales reales representan valores de tipo double

Para representar un valor de tipo float, hemos de usar el sufijo f o F:

123.45F 0.0f        .001f

El sufijo l o L se usa para los literales de tipo long double:

123.45L                0.0L        .001L

 

Operaciones con números en coma flotante

Según el estándar IEEE 754, las operaciones aritméticas en coma flotante

pueden dar como resultado valores especiales:

-Cuando el resultado de una operación está fuera de rango, se obtiene

+Inf o –Inf (“infinito”).

-Cuando el resultado de una operación está indeterminado, se obtiene

NaN (“Not a Number”)El estándar IEEE 754 establece los siguientes resultados


 

 

No obstante, en función del compilador que utilicemos, puede que nos encontremos con un error en tiempo de ejecución:

Floating point error: Domain.

Abnormal program termination

 

O bien:

Floating point error: Divide by 0.

Abnormal

program termination

 

Precisión

Las operaciones en coma flotante no son exactas debido a la forma en que se representan los números reales en el ordenados


 

 

 

Operadores aritméticos

C incluye cinco operadores para realizar operaciones aritméticas:


 

Si los operandos son enteros, se realizan  operaciones enteras.

 

-En cuanto uno de los operandos es de tipo float,double, o

long double, la operación se realiza en coma flotante.

 

-No existe un operador de exponenciación: para calcular

Xy hay que utilizar la función pow ( x,y) que se encuentra en

math.h

 


División (/)

 

 

Si se dividen enteros, el resultado es entero y el resto se pierde.

- Una división entera por cero produce un error.- Una división por cero, en coma flotante, produce ±Inf o NaN

 

Módulo(%):

Resto de dividir números enteros

(no puede usarse con números en coma flotante)


 

Expresiones aritméticas

Se pueden combinar literales y operadores para formar expresiones complejas.


 

 

 

En C se escribiría así:

(3+4*x)/5 – 10*(y-5)*(a+b+c)/x + 9*(4/x + (9+x)/y)

 

Las expresiones aritméticas se evalúan de izquierda a derecha.

-Los operadores aritméticos mantienen el orden de precedencia habitual (multiplicaciones y divisiones antes que sumas y restas).

-Para especificar el orden de evaluación deseado, se utilizan paréntesis.

NOTA: Es recomendable utilizar paréntesis para eliminar interpretaciones erróneas y posibles ambigüedades.


 

Caracteres


char, unsigned char

 

 

Literales de tipo carácter

Valores entre comillas simples

‘a’ ‘b’ ‘c’ ... ‘1’ ‘2’  ‘3’ ...‘*’ ...

 

Códigos ASCII  (en hexadecimal):

‘x??‘ ’ (avance de línea)

‘ ’ (retorno de carro)

 

Secuencias de escape para representar caracteres especiales:


 

 

 

La biblioteca ctype.h  define funciones básicas para trabajar con caracteres:

Isalpha(), isdigit(), islower(), isupper ()

to lower (), to upper ()

 

Cadenas de caracteres  en C

En ANSI C no existen las cadenas de caracteres como tipo predefinido:

una cadena de caracteres no es más que un vector de caracteres

 

Literales

Texto entra comillas dobles

“ ”

“Esto es una cadena”

‘Esto’ también es una cadena”

Las secuencias de escape son necesarias para introducir determinados caracteres dentro de una cadena:

”Esto es una cadena entre comillas””

 

Formación de cadenas de caracteres

Para construir cadenas de caracteres en las que mostrar datos, se utilizan plantillas que se sustituirán por una representación adecuada de los valores del tipo indicado:

 

 


 

 

Datos de tipo booleano

En C no existe explícitamente un tipo de dato booleano para representar algo que pueda

 ser verdadero (V) o falso (F).

 

Cualquier valor entero distinto de 0 se considera verdadero.

 

Por convención,

Se usa el valor 1 para representar algo verdadero.

 

Se usa el valor 0 para representar algo falso.

 

Expresiones de tipo booleano

 

Se construyen a partir de expresiones de tipo numérico con operadores relacionales.

 

Se construyen a partir de otras expresiones booleanas (que en C son expresiones de tipo entero)

con operadores lógicos.

 

Operadores relacionales

-Operadores de comparación válidos para números y caracteres

-Generan un resultado de tipo int que interpretamos c

 

 


Operadores lógicos/booleanos

-Operandos booleanos.

-Tienen menos precedencia que los operadores de comparación.

 

 


 

-NOT (!) cambia el valor booleano.

-AND (&&) devuelve verdadero si los dos son operandos son verdaderos.

No evalúa el segundo operando si el primero es  falso

-OR (||) devuelve falso si los dos operandos son falsos

.  No evalúa el segundo operando si el primero es verdadero

- XOR (^) devuelve verdadero si los dos operandos son diferentes.

Con operandos booleanos es equivalente a !=Ejemplos Número x entre

0 y 10 (0 <= x) && (x <= 10)Número x fuera del intervalo [0,10]!((0 <= x) && (x <= 10))

o bien (0 > x) || (x > 10)

 

Extra:

Operadores a nivel de bits

-Se pueden utilizar a nivel de bits con números enteros.

-No se pueden usar con datos de otro tipo (p.ej. reales).

 

Los operadores NOT (~), AND (&), OR(|) y XOR (^)

 

NOT (~) realiza el complemento a 1 de un número entero:

Cambia los 0s por 1s y viceversa

 

-AND(&),OR(|)y XOR(^) funcionan a nivel de bits como los operadores booleanos AND (&&), OR(||) y XOR (^), respectivamente.

 

 

 

 

 


 


 

 

Los operadores de desplazamiento <<, >> y >>>

 

El operador de desplazamiento a la izquierda (<<) desplaza los bits del primer operando tantas posiciones a la izquierda como indica el segundo operando. Los nuevos bits se rellenan con ceros.

-El operador de desplazamiento a la derecha (>>) desplaza los bits del primer operando tantas posiciones a la derecha como indica el segundo operando.

Los nuevos bits se rellenan con unos(si el primer operando es negativo) y con ceros (si es positivo).


 

 

x<<b es equivalente a

multiplicar por 2b

 

x>>b es equivalente a

realizar una división entera entre 2b cuando x es positivo.

 

 

Normal 0 false 21 false false false ES X-NONE X-NONE
Palabras claves , , ,
publicado por mariof2005 a las 08:38 · Sin comentarios  ·  Recomendar
 
Más sobre este tema ·  Participar
Comentarios (0) ·  Enviar comentario
Esta entrada no admite comentarios.
SOBRE MÍ
FOTO

Héctor Mario Freschinaldi

Mail: backupenviotrabajos@gmail.com
En AS.: 2021JVG PROG1 LUNES TT (su nombre y apellido)

En un mundo donde los cambios se suceden vertiginosamente, incluso los tecnológicos, es menester asimilar las nuevas tecnologías para su aplicación inmediata y su proyección a futuro.

» Ver perfil

CALENDARIO
Ver mes anterior Abril 2024 Ver mes siguiente
DOLUMAMIJUVISA
123456
78910111213
14151617181920
21222324252627
282930
TÓPICOS
» COMUNICADOS (4)
» EVALUACIONES (3)
» Información Tecnológica (86)
» LENGUAJE C (23)
» PROGRAMA (2)
» TEORIA (11)
» Trabajos de entrenamiento (8)
» TRABAJOS PR ÁCTICOS (5)
SECCIONES
» Inicio
ENLACES
» ¿Hay seguridad en lo que ponés en la WEB?
» ¡Te estoy espìando! (y colaborás conmigo)
» Los peligros de la WEB
» Otra de Facebook
» Historias del CHAT
» 1984/George Orwell
» Revistas de Informática, Tecnica y Nuevas Tecnolog
MÁS LEÍDOS
» 07 Elementos léxicos del lenguaje de programación C
» 1. Algoritmos.
» 10 aplicaciones útiles para llevar a todos lados 10 en un pendrive
» CODE BLOCKS no compila Posibles causas
» Ejemplo de lenguaje C - Menú de opciones
» METODOS DE ORDENAMIENTO
» Pseudocódigo
» 2021RESPUESTA A LOS DISTINTOS TEMAS DE LAS PREGUNTAS AL PARCIAL VIRTUAL DOMICILIARIO Y RECUPERATORIOS
» Seguridad en el aire
» TEORIA EN PDF
NUBE DE TAGS  [?]
AL MARGEN
¡Bienvenidos!
Este será un canal de comunicación entre nosotros.
Tendrá diferentes instancias dinamizadoras, y utilidades para trabajar los diferentes trabajos prácticos en diversas modalidades.
BUSCADOR
Blog   Web
SE COMENTA...
» Seguridad en el aire
2 Comentarios: uk vpn, uk vpn
FULLServices Network | Crear blog | Privacidad