Introducción a C: Variables, Tipos. El tipo int. Clase 3

Anuncio
Introducción a C:
Variables, Tipos
El tipo «int»
Clase 3
Introducción a la Computación
Patricia Borensztejn
Estructura de un programa en C
Hello, World
• Un programa en C consta de
funciones y variables.
• Una función contiene
proposiciones que especifican
las operaciones de cálculo que
se van a realizar, y las variables
almacenan los valores utilizados
durante los cálculos.
• En nuestro primer programa, la
función se llama «main». Uno
puede darle cualquier nombre a
las funciones, pero «main» es
especial y tiene que estar : el
programa comenzará a
ejecutarse a partir de alli.
#include <stdio.h>
int main()
{
printf("Hello world!\n");
}
La función principal: main()
• Por lo general, main() llamará
a otras funciones, algunas
que usted escribió, y otras de
bibliotecas escritas
previamente, como printf()
• La sentencia #include indica
al compilador que debe
incluir información de la
biblioteca standard de
entrada /salida
• Porque main()?
#include <stdio.h>
int main()
{
printf("Hello world!\n");
}
Variables
#include <stdio.h>
int main()
{
int suma,i;
suma=0;
for(i=3;i<1000;i++)
{
if((i%3==0)||(i%5==0)) suma=suma+i;
}
printf("El resultado es %d\n",suma);
return 0;
}
• Main, es el nombre de la
función (la principal).
• Suma, i : son dos nombres
de variables. Por lo tanto,
son nombres simbólicos de
sus direcciones.
• Todas las variables hay que
declararlas, diciendo su
nombre y su tipo.
Declaraciones de Variables
• La declaración de variables reserva espacio en
memoria, suficiente para alojar a cada una de
esas variables según su tamaño.
• El tamaño de las variables está definido por el
tipo de las mismas.
• El nombre de las variables es la posición que
ocupa en memoria.
• La sintaxis del lenguaje permite referirse a la
dirección de la variable y también a su valor.
Interface software-hardware
Valor y Dirección de una Variable
• Una variable es la dirección de una zona de memoria cuyo
tamaño está determinado por su tipo en su declaración.
• Como la memoria se direcciona a nivel de bytes, entonces
mas exactamente podemos decir que el nombre de la
variable es la dirección del byte menos significativo (mas
bajo) del dato. (en el ejemplo, var1 es 4)
int var1=1234;
1234 decimal=04D2 hexa
var1
0
0
1
1
2
2
3
3
4
D2
5
04
var1
4
5
6
6
7
7
11010010
00000100
Curiosidad
• Si yo tengo una variable que ocupa mas de un byte,
¿como la almaceno?
– ¿Con el byte menos significativo en la posición mas baja de
memoria?
– ¿Con el byte menos significativo en la posición mas alta de
memoria?
04D2
var1
0
0
1
1
2
2
3
3
4
D2
5
04
var1
4
04
5
D2
6
6
7
7
Curiosidad
• Y, como no se ponían de acuerdo los diseñadores de
computadoras, unos lo hicieron de una manera y otros
de otra manera…..
– Little endian (Intel, y otros)
– Big endian (Sparc, Mips, y otros)
Son los nombres que ambas maneras de representar tienen .
• Y ¿cual es el problema de la coexistencia de ambas
representaciones?
– Que si yo transfiero bytes de una máquina a otra, … se
produce el lío!!!!
– Una manda primero (little endian) el byte menos
significativo y el otro lo recibe y lo interpreta como el
byte mas significativo
Valor y Dirección de una Variable
• Para asignarle un valor a la variable lo hacemos de la siguiente
manera:
var1=3456 ;
Esto se lee así: en la dirección de memoria var1 guardar el valor 3456
var1=var2;
Esto se lee así: en la dirección de memoria var1 guardar el valor almacenado en la
dirección de memoria var2
• Es decir:
– Cuando la variable está a la izquierda de la asignación, se interpreta
como una dirección
– Cuando la variable está a la derecha de la asignación, sola o formando
parte de expresiones mas complejas, se interpreta como un valor.
• Y, cual es esa dirección? Puedo saberlo?
– Si, puedo saberlo y usar esa dirección: en C es &var1
var2=&var1;
O bien
printf ("la dirección de la variable var es %i y su valor es %i\n", &var1, var1);
Punteros en C
• Bueno, solo para confundir :
– Si hacemos esta asignación:
• a= &var1;
Lo que hemos creado (o sea, a) es un puntero.
0
b=a+var1; // b=04+D204=D208
1
b=(*a)+var1; // b=D204+D204=1A408
2
3
Fijense que &a= 0006 hexa
var1
a=a+2 ; // ahora a vale 08 y ya no es mas igual a var1
a
TODO ESTO y MUCHO MAS EN: ARITMÉTICA DE PUNTEROS
4
04
5
6
D2
04
7
00
Tipos de Datos
• Cada tipo de dato está caracterizado por:
–
–
–
–
Su nombre
Dominio de valores que puede tomar
Su representación
Operaciones asociadas
• Por ejemplo:
– El tipo de dato entero:
•
•
•
•
Su nombre: int (short int)
Su rango de valores: [-32768..0..32767] (en 16 bits)
Su representación: Complemento a dos
Operaciones asociadas: +,-,*,div,mod,**
Tipos de Datos
• En función de quien los define:
– Tipos de Datos Básicos (define el lenguaje)
– Tipos de Datos definidos por el Usuario
• En función de su representación interna
– Tipos de datos simples o escalares
– Tipos de datos estructurados
• Ejemplo: int es un tipo básico escalar
Tipos de Datos Básicos Escalares
• Enteros con signo
• Enteros sin signo
Enteros: Ejemplos
• Tomar el programa euler1.c y reemplazar el
tipo int de la variable suma por el tipo char.
Observar y explicar el comportamiento.
• Aplicar al rango: 1..500 con el tipo short, y
luego unsigned short. Observar y explicar el
comportamiento.
Representación de Enteros
• Complemento a 2:
– Los números positivos se representan en binario natural
– Los números negativos se representan:
– Donde: N es el número a representar, n es el número de bits de la
representación.
– Los números cuyo bit mas significativo es 1 se interpretan
como negativos
– Los números cuyo bit mas significativo es 0 se interpretan
como positivos
• Ejemplo: representar N=-25 con n=6
• Respuesta= 64-25=39(decimal)= 100111(binario)
Tipos de datos escalares
Trabajando con enteros positivos:
Euler 2
Each new term in the Fibonacci sequence is generated by adding
the previous two terms. By starting with 1 and 2, the first 10
terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
By considering the terms in the Fibonacci sequence whose values
do not exceed four million, find the sum of the even-valued
terms.
Trabajando con enteros positivos:
Euler 3
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
Descargar