SlideShare una empresa de Scribd logo
1 de 23
Lenguaje C
Tipos, operadores y expresiones
Material basado en el libro The C Programming Language. Brian W. Kernighan, Dennis M.
Ritchie. Prentice-Hall 1988. ISBN 0-13-110362-8 (paperback); ISBN 0-13-110370-9
1
Nombres de variables
● Letras mayúsculas y minúsculas
● Guión bajo
○ Cuenta como letra
● Números
○ No como primera letra
x1
windSpeed
reactive_power
No se debe comenzar por guión bajo.
Convenio habitual: variables con
minúsculas, constantes con mayúsculas.
2
Tipos de datos
Tipos básicos
char
int
float
double
Calificadores
short
long
long long
signed
unsigned
short int sh;
long int contador;
int se suele omitir:
short sh;
long contador;
3
Los límites están en:
<limits.h>
<float.h>
sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long)
1 ≤ sizeof(char)
2 ≤ sizeof(short) ≤ sizeof(int)
4 ≤ sizeof(long)
8 ≤ sizeof(long long)
sizeof(float) ≤ sizeof(double) ≤ sizeof(long double)
Tipos de datos
Tamaños
#include <limits.h>
…
short s; int i;
…
if (i < SHRT_MAX) s = i;
4
Límites de enteros
<limits.h>
Mínimo Máximo
char
signed char
unsigned char
CHAR_MIN
SCHAR_MIN
UCHAR_MIN
CHAR_MAX
SCHAR_MAX
UCHAR_MAX
(signed) short
unsigned short
SHRT_MIN
USHRT_MIN
SHRT_MAX
USHRT_MAX
(signed) int
unsigned
INT_MIN
UINT_MIN
INT_MAX
UINT_MAX
long
unsigned long
LONG_MIN
ULONG_MIN
LONG_MAX
ULONG_MAX
long long
unsigned long
long
LLONG_MIN
ULLONG_MIN
LLONG_MAX
ULLONG_MAX
5
Límites de reales
<float.h>
Formato Mínimo Máximo
float FLT_RADIX
FLT_MANT_DIG
FLT_EPSILON
FLT_DIG
FLT_MIN
FLT_MIN_EXP
FLT_MIN_10_EXP
FLT_MAX
FLT_MAX_EXP
FLT_MAX_10_EXP
double DBL_RADIX
DBL_MANT_DIG
DBL_EPSILON
DBL_DIG
DBL_MIN
DBL_MIN_EXP
DBL_MIN_10_EXP
DBL_MAX
DBL_MAX_EXP
DBL_MAX_10_EXP
long double LDBL_RADIX
LDBL_MANT_DIG
LDBL_EPSILON
LDBL_DIG
LDBL_MIN
LDBL_MIN_EXP
LDBL_MIN_10_EXP
LDBL_MAX
LDBL_MAX_EXP
LDBL_MAX_10_EXP
6
Constantes
Ejemplos
char
signed char
unsigned char
'@', 'x2f', '013', 't'
(signed) short
unsigned short
1234
1234U, 1234u
(signed) int
unsigned
long
unsigned long
1234L, 1234l
1234UL, 1234ul
long long
unsigned long long
1234LL, 1234ll
1234ULL, 1234ull
7
Constantes
Ejemplos
float 12.34f, 1234e-2F
double 12.34, 1234e-2
long double 12.34l, 1234e-2L
Debe aparecer punto o exponente o ambos.
Ejemplos límite: .0, 1.
8
Caracteres especiales
a Campana  Barra invertida
b Retroceso ? Signo de interrogación
f Form feed ' Comilla simple
n Nueva línea " Comilla doble
r Retorno de carro ooo Código octal
t Tabulador horizontal xhh Código hexadecimal
v Tabulador vertical 0 Terminador de cadenas
9
Cadenas de texto
"Soy una cadena"
"" // cadena vacía
"Soy una cadena" " muy larga"
● Son vectores de caracteres
char str[5] = "Hola";
Siempre hay un caracter
terminador ‘0’ al final
¡OJO! ‘x’ no es lo mismo que “x”
10
Constantes simbólicas
#define NOMBRE expresión_constante
#define MAXLEN 10
enum Color {
Rojo = 1,
Verde = 2,
Azul = 4,
};
enum Mes {
Ene, Feb, Mar, Abr,…
};
char str[MAXLEN];
int c = Rojo + Verde;
int mes = Feb;
O bien indicando el valor de
alguno:
enum Mes {
Ene = 1, Feb,
Mar,…
};
11
Declaraciones
int lower, upper, step;
char c, line[1000];
char esc = '';
int i = 0;
const double e = 2.7182818284;
const char msg[] = "warning";
int strlen(const char s[]) {
…
}
● Declarar antes de usar
● Es posible inicializar con
valor
● Es posible calificar como
const
○ Variable no va cambiarse
○ Argumento no se modifica
12
Operadores
Aritméticos + - * / %
++ --
De relación > >= < <= ==
!=
Lógicos ! && ||
De bits ~ | & ^ >>
<<
De asignación = += -= *= /=
%=
~= |= &= ^= ~=
>>= <<=
De arrays y punteros & * -> []
Especiales ?: , (tipo) sizeof
13
Operadores aritméticos
Binarios: + - * / %
x % y Resto de dividir x entre y (solo
enteros)
x / y División entera o real según tipos de x
e y
Unarios: + - ++ --
Precedencia: unarios, * / %, + -
Asociatividad: binarios de izquierda a derecha
unarios de derecha a
izquierda 14
Op. de relación y lógicos
Binarios: < <= > >=
&& ||
Unarios: !
Precedencia: !, aritméticos, relación, &&, ||
Asociatividad: binarios de izquierda a derecha
unarios de derecha a
izquierda
15
Conversiones de tipo
Cuando un operador tiene operandos de distintos tipos se
convierten a un tipo común
● De forma automática hacia tipos más amplios sin pérdida de información
● Se prohíben expresiones sin sentido (e.g. float como índice de vector)
● Expresiones que pueden perder información generan advertencias pero
no son ilegales
int atoi(char s[]) { // convierte s a entero
int i, n;
n = 0;
for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
n = 10 * n + (s[i] - '0');
return n;
}
Conversión char → int
16
Reglas de conversión implícita
Si un operador binario tiene dos operandos de distinto tipo
● Si un operando es long double, convierte el otro a long double
● En caso contrario, si uno es double, convierte el otro double
● En caso contrario, si uno es float, convierte el otro float
● En caso contrario, convierte char y short a int
● Después, si uno es long long convierte el otro a long long
● Después, si uno es long convierte el otro a long
int i; int i;
char c; char c;
i = c; c = i;
c = i; i = c;
No hay conversión automática
float → double
Enteros grandes a enteros pequeños
se convierten truncando bits más
significativos
Puede perder
información
17
Reglas de conversión implícita
Llamadas a función
En ausencia de prototipo
● char y short de convierten a int
● float se convierte a double
El ABI puede imponer
más conversiones
Si hay prototipo aplica
reglas de conversión
implícita
double f(double x);
int main() {
printf("%lf", f(2));
}
double f(double x) {
return x*x
+ 2*x
- 5;
}
Prototipo imprescindible para
que funcione correctamente
biblioteca
independiente
18
Conversión de tipos explícita
Operador de coerción (type cast)
(tipo) expresión
● Convierte expresión al tipo indicado
● Como si se hubiera asignado a una variable del tipo indicado
19
Operadores ++ y --
Versión prefijo y postfijo
● Prefijo incrementa antes de que el valor se use
● Postfijo incrementa después de que el valor se use
n = 5; n = 5;
x = n++; x = ++n;
Ejemplo: Concatenar cadenas
void strcat(char s[], char t[]) {
int i = 0, j = 0;
while (s[i] != '0') i++;
while ((s[i++] = t[j++]) != '0') ;
}
x == 6, n == 6
x == 5, n == 6
Busca final de s
Copia t
20
Ejercicios
1. Implementar la función
int htoi(char str[])
que convierte una cadena que contiene un número
hexadecimal en el entero correspondiente
2. Implementar la función
void squeze(char str[], int c)
que elimina todas las ocurrencias del caracter c en la
cadena str.
21
Operadores de bits
& AND bit a bit
| OR bit a bit
^ XOR bit a bit
<< Desplazamiento a la izquierda
>> Desplazamiento a la derecha
~ NOT bit a bit (complemento a 1)
0 0 1 0 0 1 0 1
0
0
1
1
0
0
1
1
char a = 0x25; b = 0x33;
a&b == 0x21
a|b == 0x37
a^b == 0x16
~a == 0xda
&
&
&
&
&
&
&
&
0 0 1 0 0 0 0 1
22
Operadores de bits
Obtener los n bits a partir de la posición p del entero x
unsigned getbits(unsigned x, int p, int n) {
return (x >> (p+1-n)) & ~(~0 << n);
}
n
p
x
23

Más contenido relacionado

Similar a Curso - C. 02. C tipos y expresiones.pptx

TUTORIAL DE LENGUAJE C
TUTORIAL DE LENGUAJE CTUTORIAL DE LENGUAJE C
TUTORIAL DE LENGUAJE CJesus Agreda
 
Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.comFresyMetal
 
Clase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacionClase 11- fundamentos de la programacion
Clase 11- fundamentos de la programaciondiego MC
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++die_dex
 
ProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y CiclosProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y CiclosAndres Garcia
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)MarielaCuriel
 
Diapositivas curso programación orientada a objetos en Java
Diapositivas curso programación orientada a objetos en JavaDiapositivas curso programación orientada a objetos en Java
Diapositivas curso programación orientada a objetos en JavaJose Perez
 
Apuntadores
ApuntadoresApuntadores
Apuntadoresluisabn
 
Apuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cApuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cZalimanunezc
 
Lenguaje c diapositivas
Lenguaje c diapositivasLenguaje c diapositivas
Lenguaje c diapositivasstarduslex
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivasstarduslex
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivasstarduslex
 
Operadores y expresiones
Operadores y expresionesOperadores y expresiones
Operadores y expresionesJorge Ñauñay
 

Similar a Curso - C. 02. C tipos y expresiones.pptx (20)

TUTORIAL DE LENGUAJE C
TUTORIAL DE LENGUAJE CTUTORIAL DE LENGUAJE C
TUTORIAL DE LENGUAJE C
 
Tema 8 www.fresymetal.com
Tema 8 www.fresymetal.comTema 8 www.fresymetal.com
Tema 8 www.fresymetal.com
 
Clase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacionClase 11- fundamentos de la programacion
Clase 11- fundamentos de la programacion
 
PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++PUNTEROS (APUNTADORES) EN C++
PUNTEROS (APUNTADORES) EN C++
 
Introducción al lenguaje c
Introducción al lenguaje cIntroducción al lenguaje c
Introducción al lenguaje c
 
Introducción
IntroducciónIntroducción
Introducción
 
Introducción
IntroducciónIntroducción
Introducción
 
ProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y CiclosProgramacióN En Java Variables Y Ciclos
ProgramacióN En Java Variables Y Ciclos
 
Programación en c (iii parte)
Programación en c (iii parte)Programación en c (iii parte)
Programación en c (iii parte)
 
Ejercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectoresEjercicios punteros cadenas-vectores
Ejercicios punteros cadenas-vectores
 
Diapositivas curso programación orientada a objetos en Java
Diapositivas curso programación orientada a objetos en JavaDiapositivas curso programación orientada a objetos en Java
Diapositivas curso programación orientada a objetos en Java
 
Lenguaje c
Lenguaje cLenguaje c
Lenguaje c
 
Apuntadores
ApuntadoresApuntadores
Apuntadores
 
Apuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje cApuntes1 elementos del lenguaje c
Apuntes1 elementos del lenguaje c
 
Tipos De Datos
Tipos De DatosTipos De Datos
Tipos De Datos
 
Lenguaje c diapositivas
Lenguaje c diapositivasLenguaje c diapositivas
Lenguaje c diapositivas
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
 
Punteros
PunterosPunteros
Punteros
 
Operadores y expresiones
Operadores y expresionesOperadores y expresiones
Operadores y expresiones
 

Último

Procedimeiento y secuencias para el diseño mecánico de ejes
Procedimeiento y secuencias para el diseño mecánico de ejesProcedimeiento y secuencias para el diseño mecánico de ejes
Procedimeiento y secuencias para el diseño mecánico de ejesRubén Cortes Zavala
 
TERRENO DE FUNDACION - CURSO DE PAVIMENTOS
TERRENO DE FUNDACION - CURSO DE PAVIMENTOSTERRENO DE FUNDACION - CURSO DE PAVIMENTOS
TERRENO DE FUNDACION - CURSO DE PAVIMENTOSELIAS RAMIREZ JUAREZ
 
Escenario económico - Desarrollo sustentable
Escenario económico - Desarrollo sustentableEscenario económico - Desarrollo sustentable
Escenario económico - Desarrollo sustentableJosPealoza7
 
SISTEMA ARTICULADO DE CUATRO BARRAS .pdf
SISTEMA ARTICULADO DE CUATRO BARRAS .pdfSISTEMA ARTICULADO DE CUATRO BARRAS .pdf
SISTEMA ARTICULADO DE CUATRO BARRAS .pdfIvanIsraelPiaColina
 
Morfología interna de insectos, respiración, circulación, nutrición, reproduc...
Morfología interna de insectos, respiración, circulación, nutrición, reproduc...Morfología interna de insectos, respiración, circulación, nutrición, reproduc...
Morfología interna de insectos, respiración, circulación, nutrición, reproduc...jacksyordoez
 
Guía de SGSST para MYPES según Ley 28793
Guía de SGSST para MYPES según Ley 28793Guía de SGSST para MYPES según Ley 28793
Guía de SGSST para MYPES según Ley 28793Camposol S. A.
 
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdfErnestoCano12
 
Tema 1 ECONOMIA del MECANIZADO.pptx.mfse
Tema 1 ECONOMIA del MECANIZADO.pptx.mfseTema 1 ECONOMIA del MECANIZADO.pptx.mfse
Tema 1 ECONOMIA del MECANIZADO.pptx.mfseyohepirell
 
Reino Fungí (1) corregida actividad para la clase de ciencias dirigida a todo...
Reino Fungí (1) corregida actividad para la clase de ciencias dirigida a todo...Reino Fungí (1) corregida actividad para la clase de ciencias dirigida a todo...
Reino Fungí (1) corregida actividad para la clase de ciencias dirigida a todo...JanEndLiamParlovRG
 
Trabajo Mecanismos de cuatro barras.pdf
Trabajo  Mecanismos de cuatro barras.pdfTrabajo  Mecanismos de cuatro barras.pdf
Trabajo Mecanismos de cuatro barras.pdfIvanIsraelPiaColina
 
Presentación PISC Préstamos ISC Final.pdf
Presentación PISC Préstamos ISC Final.pdfPresentación PISC Préstamos ISC Final.pdf
Presentación PISC Préstamos ISC Final.pdfEmanuelMuoz11
 
Sistema de 4 barras articuladas bb_2.pdf
Sistema de 4 barras articuladas bb_2.pdfSistema de 4 barras articuladas bb_2.pdf
Sistema de 4 barras articuladas bb_2.pdfLuisMarioMartnez1
 
Ciclo de Refrigeracion aplicado a ToniCorp.pptx
Ciclo de Refrigeracion aplicado a ToniCorp.pptxCiclo de Refrigeracion aplicado a ToniCorp.pptx
Ciclo de Refrigeracion aplicado a ToniCorp.pptxUniversidad de Guayaquil
 
bombeo-de-cavidad-progresiva_compress (1).pptx
bombeo-de-cavidad-progresiva_compress (1).pptxbombeo-de-cavidad-progresiva_compress (1).pptx
bombeo-de-cavidad-progresiva_compress (1).pptxEstefannyMedrano1
 
Redes GSM en la tecnología en la segunda
Redes GSM en la tecnología en la segundaRedes GSM en la tecnología en la segunda
Redes GSM en la tecnología en la segundaanonimussecreto
 
1 METABOLISMO PROTEICO. el metabolismo docx
1 METABOLISMO PROTEICO. el metabolismo docx1 METABOLISMO PROTEICO. el metabolismo docx
1 METABOLISMO PROTEICO. el metabolismo docxssuser80acf9
 
Seccion hidraulicamente optima uptc.pptx
Seccion hidraulicamente optima uptc.pptxSeccion hidraulicamente optima uptc.pptx
Seccion hidraulicamente optima uptc.pptxSIABATOORDUZVICTORHU
 
Diagramas de Tiempo.pptpara electronica aplicada
Diagramas de Tiempo.pptpara electronica aplicadaDiagramas de Tiempo.pptpara electronica aplicada
Diagramas de Tiempo.pptpara electronica aplicadaSantiago Luis Gómez
 
Carbohidratos utilizados en la industria alimentaria.pdf
Carbohidratos utilizados en la industria alimentaria.pdfCarbohidratos utilizados en la industria alimentaria.pdf
Carbohidratos utilizados en la industria alimentaria.pdfJESUSGARRIDOISLAS1
 

Último (20)

Procedimeiento y secuencias para el diseño mecánico de ejes
Procedimeiento y secuencias para el diseño mecánico de ejesProcedimeiento y secuencias para el diseño mecánico de ejes
Procedimeiento y secuencias para el diseño mecánico de ejes
 
TERRENO DE FUNDACION - CURSO DE PAVIMENTOS
TERRENO DE FUNDACION - CURSO DE PAVIMENTOSTERRENO DE FUNDACION - CURSO DE PAVIMENTOS
TERRENO DE FUNDACION - CURSO DE PAVIMENTOS
 
Escenario económico - Desarrollo sustentable
Escenario económico - Desarrollo sustentableEscenario económico - Desarrollo sustentable
Escenario económico - Desarrollo sustentable
 
SISTEMA ARTICULADO DE CUATRO BARRAS .pdf
SISTEMA ARTICULADO DE CUATRO BARRAS .pdfSISTEMA ARTICULADO DE CUATRO BARRAS .pdf
SISTEMA ARTICULADO DE CUATRO BARRAS .pdf
 
Morfología interna de insectos, respiración, circulación, nutrición, reproduc...
Morfología interna de insectos, respiración, circulación, nutrición, reproduc...Morfología interna de insectos, respiración, circulación, nutrición, reproduc...
Morfología interna de insectos, respiración, circulación, nutrición, reproduc...
 
Guía de SGSST para MYPES según Ley 28793
Guía de SGSST para MYPES según Ley 28793Guía de SGSST para MYPES según Ley 28793
Guía de SGSST para MYPES según Ley 28793
 
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
707555966-El-Libro-de-La-Inteligencia-Artificial-Version-11-Alfredovela.pdf
 
Tema 1 ECONOMIA del MECANIZADO.pptx.mfse
Tema 1 ECONOMIA del MECANIZADO.pptx.mfseTema 1 ECONOMIA del MECANIZADO.pptx.mfse
Tema 1 ECONOMIA del MECANIZADO.pptx.mfse
 
Reino Fungí (1) corregida actividad para la clase de ciencias dirigida a todo...
Reino Fungí (1) corregida actividad para la clase de ciencias dirigida a todo...Reino Fungí (1) corregida actividad para la clase de ciencias dirigida a todo...
Reino Fungí (1) corregida actividad para la clase de ciencias dirigida a todo...
 
Trabajo Mecanismos de cuatro barras.pdf
Trabajo  Mecanismos de cuatro barras.pdfTrabajo  Mecanismos de cuatro barras.pdf
Trabajo Mecanismos de cuatro barras.pdf
 
Presentación PISC Préstamos ISC Final.pdf
Presentación PISC Préstamos ISC Final.pdfPresentación PISC Préstamos ISC Final.pdf
Presentación PISC Préstamos ISC Final.pdf
 
Sistema de 4 barras articuladas bb_2.pdf
Sistema de 4 barras articuladas bb_2.pdfSistema de 4 barras articuladas bb_2.pdf
Sistema de 4 barras articuladas bb_2.pdf
 
Ciclo de Refrigeracion aplicado a ToniCorp.pptx
Ciclo de Refrigeracion aplicado a ToniCorp.pptxCiclo de Refrigeracion aplicado a ToniCorp.pptx
Ciclo de Refrigeracion aplicado a ToniCorp.pptx
 
Litio en México y su uso en baterías
Litio en México y su uso en bateríasLitio en México y su uso en baterías
Litio en México y su uso en baterías
 
bombeo-de-cavidad-progresiva_compress (1).pptx
bombeo-de-cavidad-progresiva_compress (1).pptxbombeo-de-cavidad-progresiva_compress (1).pptx
bombeo-de-cavidad-progresiva_compress (1).pptx
 
Redes GSM en la tecnología en la segunda
Redes GSM en la tecnología en la segundaRedes GSM en la tecnología en la segunda
Redes GSM en la tecnología en la segunda
 
1 METABOLISMO PROTEICO. el metabolismo docx
1 METABOLISMO PROTEICO. el metabolismo docx1 METABOLISMO PROTEICO. el metabolismo docx
1 METABOLISMO PROTEICO. el metabolismo docx
 
Seccion hidraulicamente optima uptc.pptx
Seccion hidraulicamente optima uptc.pptxSeccion hidraulicamente optima uptc.pptx
Seccion hidraulicamente optima uptc.pptx
 
Diagramas de Tiempo.pptpara electronica aplicada
Diagramas de Tiempo.pptpara electronica aplicadaDiagramas de Tiempo.pptpara electronica aplicada
Diagramas de Tiempo.pptpara electronica aplicada
 
Carbohidratos utilizados en la industria alimentaria.pdf
Carbohidratos utilizados en la industria alimentaria.pdfCarbohidratos utilizados en la industria alimentaria.pdf
Carbohidratos utilizados en la industria alimentaria.pdf
 

Curso - C. 02. C tipos y expresiones.pptx

  • 1. Lenguaje C Tipos, operadores y expresiones Material basado en el libro The C Programming Language. Brian W. Kernighan, Dennis M. Ritchie. Prentice-Hall 1988. ISBN 0-13-110362-8 (paperback); ISBN 0-13-110370-9 1
  • 2. Nombres de variables ● Letras mayúsculas y minúsculas ● Guión bajo ○ Cuenta como letra ● Números ○ No como primera letra x1 windSpeed reactive_power No se debe comenzar por guión bajo. Convenio habitual: variables con minúsculas, constantes con mayúsculas. 2
  • 3. Tipos de datos Tipos básicos char int float double Calificadores short long long long signed unsigned short int sh; long int contador; int se suele omitir: short sh; long contador; 3
  • 4. Los límites están en: <limits.h> <float.h> sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long) 1 ≤ sizeof(char) 2 ≤ sizeof(short) ≤ sizeof(int) 4 ≤ sizeof(long) 8 ≤ sizeof(long long) sizeof(float) ≤ sizeof(double) ≤ sizeof(long double) Tipos de datos Tamaños #include <limits.h> … short s; int i; … if (i < SHRT_MAX) s = i; 4
  • 5. Límites de enteros <limits.h> Mínimo Máximo char signed char unsigned char CHAR_MIN SCHAR_MIN UCHAR_MIN CHAR_MAX SCHAR_MAX UCHAR_MAX (signed) short unsigned short SHRT_MIN USHRT_MIN SHRT_MAX USHRT_MAX (signed) int unsigned INT_MIN UINT_MIN INT_MAX UINT_MAX long unsigned long LONG_MIN ULONG_MIN LONG_MAX ULONG_MAX long long unsigned long long LLONG_MIN ULLONG_MIN LLONG_MAX ULLONG_MAX 5
  • 6. Límites de reales <float.h> Formato Mínimo Máximo float FLT_RADIX FLT_MANT_DIG FLT_EPSILON FLT_DIG FLT_MIN FLT_MIN_EXP FLT_MIN_10_EXP FLT_MAX FLT_MAX_EXP FLT_MAX_10_EXP double DBL_RADIX DBL_MANT_DIG DBL_EPSILON DBL_DIG DBL_MIN DBL_MIN_EXP DBL_MIN_10_EXP DBL_MAX DBL_MAX_EXP DBL_MAX_10_EXP long double LDBL_RADIX LDBL_MANT_DIG LDBL_EPSILON LDBL_DIG LDBL_MIN LDBL_MIN_EXP LDBL_MIN_10_EXP LDBL_MAX LDBL_MAX_EXP LDBL_MAX_10_EXP 6
  • 7. Constantes Ejemplos char signed char unsigned char '@', 'x2f', '013', 't' (signed) short unsigned short 1234 1234U, 1234u (signed) int unsigned long unsigned long 1234L, 1234l 1234UL, 1234ul long long unsigned long long 1234LL, 1234ll 1234ULL, 1234ull 7
  • 8. Constantes Ejemplos float 12.34f, 1234e-2F double 12.34, 1234e-2 long double 12.34l, 1234e-2L Debe aparecer punto o exponente o ambos. Ejemplos límite: .0, 1. 8
  • 9. Caracteres especiales a Campana Barra invertida b Retroceso ? Signo de interrogación f Form feed ' Comilla simple n Nueva línea " Comilla doble r Retorno de carro ooo Código octal t Tabulador horizontal xhh Código hexadecimal v Tabulador vertical 0 Terminador de cadenas 9
  • 10. Cadenas de texto "Soy una cadena" "" // cadena vacía "Soy una cadena" " muy larga" ● Son vectores de caracteres char str[5] = "Hola"; Siempre hay un caracter terminador ‘0’ al final ¡OJO! ‘x’ no es lo mismo que “x” 10
  • 11. Constantes simbólicas #define NOMBRE expresión_constante #define MAXLEN 10 enum Color { Rojo = 1, Verde = 2, Azul = 4, }; enum Mes { Ene, Feb, Mar, Abr,… }; char str[MAXLEN]; int c = Rojo + Verde; int mes = Feb; O bien indicando el valor de alguno: enum Mes { Ene = 1, Feb, Mar,… }; 11
  • 12. Declaraciones int lower, upper, step; char c, line[1000]; char esc = ''; int i = 0; const double e = 2.7182818284; const char msg[] = "warning"; int strlen(const char s[]) { … } ● Declarar antes de usar ● Es posible inicializar con valor ● Es posible calificar como const ○ Variable no va cambiarse ○ Argumento no se modifica 12
  • 13. Operadores Aritméticos + - * / % ++ -- De relación > >= < <= == != Lógicos ! && || De bits ~ | & ^ >> << De asignación = += -= *= /= %= ~= |= &= ^= ~= >>= <<= De arrays y punteros & * -> [] Especiales ?: , (tipo) sizeof 13
  • 14. Operadores aritméticos Binarios: + - * / % x % y Resto de dividir x entre y (solo enteros) x / y División entera o real según tipos de x e y Unarios: + - ++ -- Precedencia: unarios, * / %, + - Asociatividad: binarios de izquierda a derecha unarios de derecha a izquierda 14
  • 15. Op. de relación y lógicos Binarios: < <= > >= && || Unarios: ! Precedencia: !, aritméticos, relación, &&, || Asociatividad: binarios de izquierda a derecha unarios de derecha a izquierda 15
  • 16. Conversiones de tipo Cuando un operador tiene operandos de distintos tipos se convierten a un tipo común ● De forma automática hacia tipos más amplios sin pérdida de información ● Se prohíben expresiones sin sentido (e.g. float como índice de vector) ● Expresiones que pueden perder información generan advertencias pero no son ilegales int atoi(char s[]) { // convierte s a entero int i, n; n = 0; for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i) n = 10 * n + (s[i] - '0'); return n; } Conversión char → int 16
  • 17. Reglas de conversión implícita Si un operador binario tiene dos operandos de distinto tipo ● Si un operando es long double, convierte el otro a long double ● En caso contrario, si uno es double, convierte el otro double ● En caso contrario, si uno es float, convierte el otro float ● En caso contrario, convierte char y short a int ● Después, si uno es long long convierte el otro a long long ● Después, si uno es long convierte el otro a long int i; int i; char c; char c; i = c; c = i; c = i; i = c; No hay conversión automática float → double Enteros grandes a enteros pequeños se convierten truncando bits más significativos Puede perder información 17
  • 18. Reglas de conversión implícita Llamadas a función En ausencia de prototipo ● char y short de convierten a int ● float se convierte a double El ABI puede imponer más conversiones Si hay prototipo aplica reglas de conversión implícita double f(double x); int main() { printf("%lf", f(2)); } double f(double x) { return x*x + 2*x - 5; } Prototipo imprescindible para que funcione correctamente biblioteca independiente 18
  • 19. Conversión de tipos explícita Operador de coerción (type cast) (tipo) expresión ● Convierte expresión al tipo indicado ● Como si se hubiera asignado a una variable del tipo indicado 19
  • 20. Operadores ++ y -- Versión prefijo y postfijo ● Prefijo incrementa antes de que el valor se use ● Postfijo incrementa después de que el valor se use n = 5; n = 5; x = n++; x = ++n; Ejemplo: Concatenar cadenas void strcat(char s[], char t[]) { int i = 0, j = 0; while (s[i] != '0') i++; while ((s[i++] = t[j++]) != '0') ; } x == 6, n == 6 x == 5, n == 6 Busca final de s Copia t 20
  • 21. Ejercicios 1. Implementar la función int htoi(char str[]) que convierte una cadena que contiene un número hexadecimal en el entero correspondiente 2. Implementar la función void squeze(char str[], int c) que elimina todas las ocurrencias del caracter c en la cadena str. 21
  • 22. Operadores de bits & AND bit a bit | OR bit a bit ^ XOR bit a bit << Desplazamiento a la izquierda >> Desplazamiento a la derecha ~ NOT bit a bit (complemento a 1) 0 0 1 0 0 1 0 1 0 0 1 1 0 0 1 1 char a = 0x25; b = 0x33; a&b == 0x21 a|b == 0x37 a^b == 0x16 ~a == 0xda & & & & & & & & 0 0 1 0 0 0 0 1 22
  • 23. Operadores de bits Obtener los n bits a partir de la posición p del entero x unsigned getbits(unsigned x, int p, int n) { return (x >> (p+1-n)) & ~(~0 << n); } n p x 23