Вы находитесь на странице: 1из 21

Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

UNIDAD 2: Tipos de datos y operaciones

Objetivo terminal de la unidad:

Conocer todas las estructuras básicas para comenzar a trabajar como Lenguje C,
estructuras de declaración de variables y asignaciones de valores, operaciones
aritméticas, lógicas.*** este no ****

Este es el objetivo que esta en el diseño instruccional, es lo mismo pero mas


general y sin el verbo conocer:

Describir todas las estructuras básicas del Lenguaje C para desarrollar códigos que
permitan el manejo de datos de manera eficiente

Temas

● Expresiones y sentencias
● Variables y palabras reservadas
● Caracteres especiales
● Tipos de datos
● Constantes : Enteras, de caracteres, enumeradas
● Operadores
● Comentarios
● Identación ***Myrle este punto está en el diseño instruccional que ya
entregamos ***

● Expresiones y Sentencias

Expresiones

Se considera una expresión a una combinación de variables y/o constantes, y


operadores. Una expresión es equivalente al resultado que proporciona al aplicar sus
operadores a sus operandos, por ejemplo, 1+5 es una expresión formada por dos
operandos (1 y 5) y un operador (el +); esta expresión es equivalente al valor 6, lo cual
quiere decir que allí cuando esta expresión aparece en el programa, en el momento de la
ejecución se evaluada y se sustituye por su resultado. En C existen diferentes tipos de
expresiones; una expresión puede estar formada por otras expresiones más sencillas, y
puede contener paréntesis de varios niveles agrupando distintos términos.

Expresiones aritméticas

Éstas se forman con variables y/o constantes, y distintos operadores aritméticos e


incrementales (+, -, *, /, %, ++, --). De igual forma, se pueden emplear paréntesis de

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

tantos niveles como se desee, y su interpretación sigue las normas aritméticas


convencionales. Por ejemplo, la solución de la ecuación de segundo grado:

−b + b 2 − 4 ac
x= --------------------
2a

se escribe, en C en la forma:

x=(-b+sqrt((b*b)-(4*a*c)))/(2*a);

donde, en sentido estricto, sólo lo que se encuentra a la derecha del operador de


asignación (=) es una expresión aritmética. El conjunto de la variable que se encuentra a
la izquierda del signo (=), el operador de asignación, la expresión aritmética y el caracter
(;) constituyen una sentencia. En expresión presentada antes aparece la llamada a la
función de librería sqrt(), que tiene como valor de retorno la raíz cuadrada de su único
argumento. También, en las expresiones se pueden introducir espacios en blanco entre
operandos y operadores; por ejemplo, la expresión anterior se puede escribir también de
la siguiente forma:

x = (-b + sqrt((b * b) - (4 * a * c)))/(2 * a);

Expresiones lógicas

Los valores lógicos son los elementos con los que se forman éstas expresiones;
verdaderos (true, o distintos de 0) y falsos (false, o iguales a 0), y los operadores lógicos
||, && y !. También se pueden emplear los operadores relacionales (<, >, <=, >=, ==, !
=) para producir estos valores lógicos a partir de valores numéricos. Estas expresiones
equivalen siempre a un valor 1 (true) o a un valor 0 (false). Por ejemplo:

a = ((b>c)&&(c>d))||((c==e)||(e==b));

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

donde de nuevo la expresión lógica es lo que se encuentra entre el operador de


asignación (=) y el (;). La variable a valdrá 1 si b es mayor que c y c mayor que d, ó si c
es igual a e ó e es igual a b.

Expresiones generales

Una de las características más importantes, y en ocasiones más difíciles de


manejar, del C es su flexibilidad para combinar expresiones y operadores de distintos
tipos en una expresión que se podría llamar general, aunque es una expresión
absolutamente ordinaria de C. Téngase en cuenta que el resultado de una expresión
lógica es siempre un valor numérico (un 1 ó un 0); esto permite que cualquier expresión
lógica pueda aparecer como sub-expresión en una expresión aritmética. Recíprocamente,
cualquier valor numérico puede ser considerado como un valor lógico: true si es distinto
de 0 y false si es igual a 0. Esto permite introducir cualquier expresión aritmética como
sub-expresión de una expresión lógica. Por ejemplo:

(a - b*2.0) && (c != d)

Al mismo tiempo, el operador de asignación (=), además de introducir un nuevo


valor en la variable que figura a su izquierda, deja también este valor disponible para ser
utilizado en una expresión más general. Por ejemplo, si se tiene el siguiente código que
inicializa a 1 las tres variables a, b y c:

a = b = c = 1;

que equivale a:

a = (b = (c = 1));

Lo que se hizo en realidad fue lo siguiente. En primer lugar se le asignó un valora


la unidad a c; el resultado de esta asignación es también un valor unidad, que se
encuentra disponible para ser asignado a b; a su vez, el resultado de esta segunda
asignación vuelve a quedar disponible y se puede asignar a la variable a.

Sentencias

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

Las expresiones de C son unidades o componentes elementales de unas entidades


de rango superior que son las sentencias. Las sentencias son unidades completas,
ejecutables en sí mismas. Luego, se evaluarán muchos tipos de sentencias para ver
como éstas incorporan las expresiones aritméticas, lógicas o generales como
componentes de dichas sentencias.

Sentencias simples

Ésta es una expresión de algún tipo terminada con un caracter (;), lo que se
considera un caso típico son las declaraciones o las sentencias aritméticas. Por ejemplo:

float real;
espacio = espacio_inicial + velocidad * tiempo;

Sentencia vacía ó nula

En algunos casos se necesita introducir en el programa una sentencia que ocupe


un lugar, pero que no realice ninguna tarea. A esta sentencia se le denomina sentencia
vacía y consta de un único caracter (;). Por ejemplo:

Sentencias compuestas o bloques

A veces se necesita colocar varias sentencias en un lugar del programa donde


debería haber una sola. Esto se lleva a cabo por medio de sentencias compuestas; éstas
son un conjunto de declaraciones y de sentencias agrupadas dentro de llaves {...},
también se les conoce por el nombre de bloques. Una sentencia compuesta puede incluir
otras sentencias, simples y compuestas. A continuación se presenta un ejemplo de
sentencia compuesta:

{
int i = 1, j = 3, k;
double masa;
masa = 3.0;
k = y + j;
}

● Variables y palabras reservadas

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

Variables o identificadores

Es el nombre con el que se hace referencia a una función o al contenido de una


zona de la memoria (variable). Cada lenguaje tiene sus propias reglas respecto a las
posibilidades de elección de nombres para las funciones y variables. En C estas reglas
son las siguientes:

1. Un identificador o variable se forma con una secuencia de letras (minúsculas de la a


a la z; mayúsculas de la A a la Z; y dígitos del 0 al 9).
2. El caracter subrayado o underscore (_) se considera como una letra más.
3. Un identificador no puede contener espacios en blanco, ni otros caracteres distintos
de los citados, como por ejemplo (*,;.:-+, etc.).
4. El primer caracter de un identificador debe ser siempre una letra o un (_), es decir,
no puede ser un dígito.
5. Se hace distinción entre letras mayúsculas y minúsculas. Así, Masa es considerado
como un identificador distinto de masa y de MASA.
6. El estándar ANSI C permite definir identificadores de hasta 31 caracteres de
longitud.

Algunos ejemplos de identificadores válidos son los siguientes:

tiempo, distancia1, caso_A, PI, velocidad_de_la_luz

En cambio, los siguientes nombres no son válidos (¿Por qué?)

1_valor, tiempo-total, dolares$, %final

En general, se aconseja elegir los nombres de las funciones y las variables de forma
que permitan conocer a simple vista qué tipo de variable o función representan,
utilizando para ello tantos caracteres como sean necesarios. Esto ayuda a simplificar en
gran medida la tarea de programación y, sobre todo, de corrección y mantenimiento de
los programas. También es verdad que los nombres largos son más laboriosos de
escribir, pero en general resulta rentable tomarse esa pequeña molestia.

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

Palabras reservadas en C

En el caso de C, como en cualquier otro lenguaje, existen una serie de palabras


clave (keywords) que el usuario no puede utilizar como identificadores, ya sean nombres
de variables y/o de funciones. Estas palabras sirven para indicarle al computador que
realice una tarea muy específica, que puede ir desde evaluar una comparación, hasta
definir el tipo de una variable, y cuentan con un significado especial para el compilador.
El lenguaje C es muy conciso, ya que cuenta con muchas menos palabras clave
que otros lenguajes. A continuación se presenta la lista de las 32 palabras clave del ANSI
C, cuyo significado se tratará en temas posteriores (algunos compiladores añaden otras
palabras clave, propias de cada uno de ellos. Es importante evitarlas como
identificadores):

auto double int struct


break else long switch
case enum register
typedef
char extern return union
const float short
unsigned
continue for signed void
default goto sizeof volatile
do if static while

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

Caracteres especiales

Ciertos caracteres que no pueden representarse de forma gráfica, como el


apóstrofe (') y la barra invertida (\) así como otros caracteres, se representan mediante
la siguiente tabla de secuencias de escape, con ayuda de la barra invertida (\). En el
siguiente resumen se aprecia como se representa en C un caracter que se encuentra
asociado a una constante:

Nombre completo Constante en C ASCII


sonido de alerta BEL \a 7
nueva línea NL \n 10
tabulador horizontal HT \t 9
retroceso BS \b 8
retorno de carro CR \r 13
salto de página FF \f 12
barra invertida \ \\ 92
apóstrofo ' \' 39
comillas " \" 34
carácter nulo NULL \0 0

También, los caracteres ASCII se pueden representar mediante el número octal


correspondiente, encerrado entre apóstrofes y precedido por la barra invertida. Por
ejemplo, '\07' y '\7' representan el número 7 del código ASCII, sin embargo, '\007' es la
representación octal del carácter '7', que es el sonido de alerta. El ANSI C también
admite secuencias de escape hexadecimales, por ejemplo '\x1a'.

● Tipos de datos

El lenguaje C ofrece una colección de tipos de datos bastante limitada, aunque no


por ello poco funcional. Dicha colección se compone de los siguientes tipos:

● char Contenido: puede contener un caracter del conjunto de caracteres


locales
Tamaño: normalmente 1 byte.
● int Contenido: un número entero
Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y
operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

Tamaño: el determinado por la arquitectura para números enteros. En


arquitecturas Intel/x86 es 4 bytes
● float Contenido: un número en coma flotante
Tamaño: el determinado por la arquitectura para números en coma
flotante. En arquitecturas Intel/x86 es 4 bytes
● double Contenido: un número en coma flotante de precisión doble
Tamaño: el determinado por la arquitectura para números en coma flotante
de doble precisión. En arquitecturas Intel/x86 es 8 bytes

Calificadores : constituyen un atributo que le indica al compilador una característica de


la variable declarada.

short y long
Es normal que el rango de representación ofrecido por un tipo es suficientemente
grande para las necesidades habituales. Sin embargo, en C es posible sugerir al
compilador que utilice más memoria a la hora de almacenar la variable de ese tipo. Esto
se hace con el calificador long:

long int numero_entero_grande;


long double numero_real_grande;

El calificador short actúa de forma contraria a long. Si por ejemplo se dispone de


una variable que se conoce que no va a utilizar todo el rango ofrecido por el tipo int se
puede calificar como short int ahorrando, posiblemente, memoria.

signed y unsigned

Éstos se utilizan en los tipos char e int para indicarle al compilador que la variable
declarada tomará valores negativos y positivos (signed) o sólo positivos o cero
(unsigned).

static(local)

Al declarar una variable local con el modificador static, se conseguirá que la


variable sea accesible solamente desde esa función y que conserve su valor a través de
sucesivas llamadas.

static(global)

Las variables globales son por defecto accesibles desde cualquier fuente del
programa; si se declara una variable global con el modificador static se impedirá que
Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y
operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

éstas variables sean visibles desde otro fuente. De igual forma, las funciones definidas en
un fuente son utilizables desde cualquier otro. Si se desea impedir que una función sea
llamada desde fuera del fuente en la que se encuentra definida se utilizará el modificador
static.

register

Al utilizar este modificador se le indica al compilador que la variable debe ser


almacenada en un registro de la CPU, no en la memoria.

volatile

Este modificador se usa con variables que puedan ser modificadas desde el
exterior del programa por procesos externos. Obliga al compilador a leer de memoria el
valor de la variable siempre que vaya a ser usada, aunque ya tenga dicho valor en algún
registro de alguna lectura anterior. Se utiliza con variables en las que no se sabe con
certeza cuándo se va a modificar su contenido.

volatile int i;

●Constantes: de caracter, numéricas y enumeradas


Las constantes
Éstas son variables, a las cuales se les asigna un valor y este no puede se cambiado. Las
constantes se declaran utilizando la palabra clave const, por ejemplo:

const a = 6;

Nota: es normal inicializar una constante con un valor, ya que no puede ser cambiada de
alguna otra forma.

Constantes de caracteres
Las cadenas de caracteres son representadas encerrando la cadena entre comillas
dobles, un ejemplo de esto sería "hola cocacola". Existen ciertos caracteres que no se
puede, o donde no se considera cómodo, introducir de esta forma, como son los
caracteres de control: tabulador, retorno de carro, entre otros.
Para poderlos introducir hay que utilizar unos códigos que consisten en una barra
invertida y una letra, estos son los principales:
Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y
operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

Código Significado
\n Retorno de carro
\t Tabulador
\” Comillas dobles
\` Comilla simple
\\ Barra invertida
Tabla 2.1 Constantes de cadena

Constantes numéricas

Además de las constantes enteras tipo 234 y en coma flotante de la forma 10.4, a
veces, sobre todo al trabajar a bajo nivel, resulta más cómodo poder introducir la
constante en base 8 (octal) o 16 (hexadecimal) que en base 10. El lenguaje C permite
especificar constantes enteras en hexadecimal u octal, ya que es normal la utilización de
estos sistemas de numeración. Una constante hexadecimal empieza por 0x seguido del
número esa base. De igual forma, una constante octal comienza por 0:

const int hex = 0x80A; /* 2058 en decimal */


const int oct = 012; /* 10 en decimal */

Constantes enumeradas

Éstas permiten definir una lista de constantes representadas por identificadores.


Estas constantes son, en realidad, enteros. Si no se especifica una correspondencia entre
nombre y número el compilador se encarga de asignarles números correlativos,
comenzando por 0. Se pueden utilizar como enteros que son, pero la idea es usarlos en
comparaciones, de esta forma haciendo el código más legible.
Para definirlas se usa la palabra reservada enum, de la siguiente forma:

enum color{rojo, amarillo, morado};


enum bool{false=0, true=1};

Desde allí se puede poner por ejemplo:


Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y
operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

if(color == rojo)...

en vez de tener que poner:

if(color == 0)...

Constantes simbólicas. Estas constante tienen un nombre (identificador) y en esto se


parecen a las variables. Sin embargo, éstas no pueden cambiar de valor a lo largo de la
ejecución del programa. En C se pueden definir mediante el preprocesador o por
medio de la palabra clave const. En C++ se utiliza, preferiblemente, esta segunda forma.

● Operadores

Los operadores son símbolos (+, -, *, /, etc.) los cuales cuentan con una función
predefinida (suma, resta, multiplicación, etc.) y que recibe sus argumentos de manera
infija, en el caso de tener 2 argumentos o de manera prefija o postfija, en el caso de
tener uno solo. En C existe una gran variedad de operadores, que pueden ser agrupados
de la siguiente forma:

● Operadores aritméticos
● Operadores relacionales
● Operadores lógicos
● Operadores a nivel de bit (bitwise operators)
● Operadores especiales

Operadores aritméticos

Éstos operadores nos permiten, básicamente, realizar cualquier operación


aritmética que se requiera (ejemplo: suma, resta, multiplicación, etc.) En la siguiente
tabla se muestran los operadores disponibles para C y su función asociada.

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

Operador Acción Ejemplo


- Resta x = 5 – 3; // x vale 2
+ Suma x = 2 + 3; // x vale
5
* Multiplicación x= 2 * 3; // x vale 6
/ División x = 6 / 2 ; // x vale 3
% Módulo x= 5 % 2; //x vale 1
-- Decremento x=1; x --; //x vale 0
++ Incremento x=1; x ++;// x vale
2

Tabla 2.2 Operadores aritméticos


Tal y como se puede ver, los operadores de incremento y decremento añaden o restan
una unidad a su operando. Nótese que estos operadores modifican el valor del operando:

x = 4;
y = x++;
/* Después de esta instrucción x valdrá 5 e */
/* y valdrá 4 (como se veraa continuación). */

Los incrementos y decrementos son operadores muy útiles, y en muchas ocasiones


es más clara su utilización que hacer una simple suma o resta:

x = 4;
/* Un pequeño for */
int i,j;

for ( i = 0; i < 10; i = i + 1 )


/* no hace nada */;

for ( j = 0; j < 10; j++ )


/* hace lo mismo que el anterior: nada */;

Forma prefija: preincremento y predecremento

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

Cuando un operador de incremento o decremento precede a su operando, se


llevará a cabo la operación de incremento o de decremento antes de utilizar el valor del
operando. Esto se ve más fácil a través de un ejemplo:

int x,y;

x = 2004;
y = ++x;
/* x e y valen 2005. */

Forma postfija: postincremento y postdecremento

Para el caso de los postincrementos y postdecrementos ocurre lo contrario: se


utilizará el valor actual del operando y luego se efectuará la operación de incremento o
decremento.

int x,y

x = 2004;
y = x++;
/* y vale 2004 y x vale 2005 */

Operadores relacionales

De la misma forma que en matemáticas, estos operadores nos permitirán evaluar


las relaciones (igualdad, mayor, menor, etc.) entre un par de operandos, en principio se
debe pensar en números. Los operadores relacionales de los que se dispone en C son:

Operador Acción
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
== Igual

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

!= Distinto

Tabla 2.3 Operadores relacionales

El resultado de cualquier operación de este tipo es un valor “cierto” (true) o “falso”


(false). La mayoría de los lenguajes tienen algún tipo predefinido para representar estos
valores (boolean, bool, etc.); sin embargo en C, se utilizan valores enteros para
representarlos: 0 para false y 1 para true.

Operadores lógicos

Este nombre se designa a aquellos operadores que permiten “conectar” un par de


propiedades, al igual que en lógica:

numero = 2701;
if ( EsPrimo(numero) && (numero > 1000) ){
/* Ejecutara este código si numero */
/* es primo y numero es mayor que 100 */
}

Los operadores lógicos con los que cuenta C son los siguientes:

Operador Acción
&& Conjunción(y)
|| Disyunción(o)
! Negación

Tabla 2.4 Operadores lógicos

De la misma forma que la igualdad, hay que tener especial cuidado con los
operadores && y ||, ya que si se coloca sólo un & ó un |, se está haciendo referencia a
Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y
operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

un “and” ó un “or” a nivel de bit, como resultado el código no llevará acabo lo que se
desea, o puede que algunas veces lo haga y otras veces no.

Operadores a nivel de bit (bitwise operators)

Para ciertos casos nos puede interesar manipular datos a nivel de bit; por ejemplo
activar o desactivar flags. Un flag es una “variable” que puede tomar 2 valores, por lo
que se suele representar con un bit. Debido a que en C, y en la mayoría de los lenguajes
de programación, no existen tipos predefinidos de un bit, lo que suele hacerse es agrupar
varios flags en una variable de tipo entero (“short int”, “int” o lo que se desee).
Si se quiere tener acceso a estos flags, o si solo se desea activarlos es necesario
utilizar operadores a nivel de bit. Se presenta un ejemplo de este caso
Se necesita especificar lo que una llamada al sistema ``open'' (en POSIX) debe
hacer con el archivo abrir: crearlo si no existe, sobreescribirlo si existe, no
sobreescribirlo, etc.

int open(const char *path, int flags);


//Donde:
// path --> indica el path de donde se encuentra el archivo
// flags --> indica lo que se quiere hacer con el archivo ...
//
//Flags puede ser:
// O_CREAT Si el archivo no existe, será creado.
// O_EXCL Cuando se combina con O_CREAT, se considerará un
// error que el archivo ya exista.
// O_TRUNC Si el archivo ya existe, será truncado.
// O_APPEND El archivo se abrirá en modo de sólo-añadir.
// O_NONBLOCK El archivo se abre en modo no bloqueante.
// ...

Si se desea abrir el archivo ``/tmp/tutorial_c.txt'' en modo lectura y que se pueda


escribir al final del mismo se colocará:

int fd;

fd = open ("/tmp/tutorial_c.txt", O_CREAT | O_APPEND );


// también lo podría hacer "a pelo":
// open ("/tmp/tutorial_c.txt", 0x440)

write(fd, "Hola mundo...\n", 14);

close (fd);
Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y
operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

Es bueno conocer como actúan estos operadores y de cuales se dispone, aunque


normalmente no se suelen utilizar.

Operador Acción
& AND a nivel de bit
| OR a nivel de bit
ʌ XOR a nivel de bit
~ Complemento
<< Desplazamiento a la
izquierda
>> Desplazamiento a la
derecha

Tabla 2.5 Operadores a nivel de bit

A continuación se presenta una breve descripción de cada uno de estos operadores.

El operador AND (&): este operador compara dos bits; si los dos son 1 el resultado es
1, en otro caso el resultado será 0. Ejemplo:
c1 = 0x45 --> 01000101
c2 = 0x71 --> 01110001
---------------------------
c1 & c2 = 0x41 --> 01000001

El operador OR (|): este operador compara dos bits; si cualquiera de los dos bits es 1,
entonces el resultado es 1; en otro caso será 0. Ejemplo:
i1 = 0x47 --> 01000111
i2 = 0x53 --> 01010011
---------------------------
i1 | i2 = 0x57 --> 01010111

El operador XOR (ʌ): este operador OR exclusivo o XOR, dará como resultado un 1 si
cualquiera de los dos operandos es 1, pero no los dos a la vez. Ejemplo:
i1 = 0x47 --> 01000111
i2 = 0x53 --> 01010011
---------------------------
Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y
operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

i1 ^ i2 = 0x14 --> 00010100

El operador de complemento (~): éste devuelve como resultado el complemento a


uno del operando:
c = 0x45 --> 01000101
----------------------
~c = 0xBA --> 10111010

Los operadores de desplazamiento a nivel de bit ( << y >> ): estos desplazan a la


izquierda o a la derecha un número especificado de bits. En un desplazamiento a la
izquierda los bits que sobran por el lado izquierdo se descartan y se rellenan los nuevos
espacios con ceros. De forma análoga sucede con los desplazamientos a la derecha.

Operadores especiales

El operador de asignación
La asignación se considera una sentencia especial en otros lenguajes de
programación, en C, esto no es así, la asignación es un operador más. Este operador,
tiene como lvalue (left value, el valor a la izquierda del operador) un variable y como
rvalue una expresión válida. Ya que es un operador, el todo es una expresión:

Es por ello que se pueden hacer asignaciones múltiples:

int x,y,z;

x = y = z = 0;

Las asignaciones compuestas son una serie de casos particulares de la asignación.


La asignación compuesta simplifica la escritura de operaciones en las que el lvalue
aparece tanto a la derecha como a la izquierda; como se plantea en el siguiente ejemplo:

int x;

x = x + 2;

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

La forma abreviada de escribirlo se llevará a cabo poniendo el operador ``+'' (en


este caso) a continuación el igual, y por último la expresión que se está sumando al
lvalue, que en este caso es 2.

int x;

x += 2;

Operador ternario ? (operador condicional)

Este operador “?” sirve para escribir expresiones condicionales. Su formato es el


siguiente “expresion1 ? expresion2 : expresion3”, la expresion1 se evalúa primero, si es
diferente de cero (verdadero) entonces se evalúa la expresion2, la cual se devuelve como
resultado de la expresión condicional. Si la expresion1 es igual a cero (falso) se evalúa la
expresion3 y se devuelve como resultado de la expresión condicional.

El operador sizeof

El operador sizeof es un operador unario que devuelve la longitud, en bytes, de la


variable o de un tipo especificado. Es muy útil para hacer un malloc u otras operaciones.

double un_double;

printf ("double: %d \n", sizeof( un_double )); //8


printf ("float : %d \n", sizeof( float )); //4
printf ("int : %d \n", sizeof( int )); //4

El operador cast

Este operador se considera un operador unario, que hace una conversión explícita
(la fuerza) del tipo de una expresión. Su formato es el siguiente “(nombre_de_tipo)
expresión”, la expresión se convierte al tipo nombrado, siempre que esa conversión sea
posible.

int n; // n es un entero

sqrt((double) n); // se pasa n a double


//porque sqrt no acepta un int como parámetro

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

El operador coma “,”

Con este operador se encadenan varias expresiones. En este caso lvalue y rvalue
son expresiones válidas. El valor resultante de evaluar una expresión del tipo ``(lvalue ,
rvalue)'' es el resultante de evaluar el rvalue (esto no significa que el lvalue no se
evalúe). Ejemplo:

x = ( y = 9, z = 0); // x valdrá 0.

Aunque su uso no es precisamente el del ejemplo, ya que puede dar como


resultado unos códigos un tanto oscuros, puede servir para hacer cosas como el ejemplo
presentado a continuación, de una manera más o menos sencilla.

int i, j;
char *cadena = strdup ("hola mundo!");
printf("%s\n", cadena);
for ( i = 0, j = strlen(cadena) - 1; i > j ; i++, j--){
cadena[i] = '*';
cadena[j] = '*';
printf("%s\n", cadena);
}

Los operadores “(“ y “)”

Éstos, simplemente alteran el orden de evaluación por defecto, al utilizar las


precedencias de los operadores; este concepto es bastante común, ya que se utiliza
también en matemáticas.

x = 5 * 2 + 1; // x == 11
y = 5 * (2 + 1); // x == 15

Orden de precedencia de los operadores

Se necesita tener cuidado con el significado de expresiones tales como a + b * c,


dependiendo de lo que se desee hacer. Para a=5 , b=3 y c=5

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

a + b * c = 20
(a + b) * c = 40
a + (b * c)= 20

Se deben considerar los tres resultados anteriores, y revisar la importancia del


paréntesis, ya que dependiendo de la operación que desea realizar será utilizado. Sin
embargo, todos los operadores tienen una prioridad:

-Los operadores de mayor prioridad son evaluados antes que los que tienen menor
prioridad.

-Los operadores que tienen la misma prioridad son evaluados de izquierda a derecha, por
lo que:

En a + b - c es evaluado como (a + b) – c

En a - b - c es evaluado como (a - b) – c

Las () es un símbolo de agrupación

● Comentarios

De acuerdo con lo estudiado en la primera unidad, el lenguaje C permite que el


programador introduzca comentarios en los archivos fuente que contienen el código del
programa. La función de los comentarios es servir de explicación o aclaratoria sobre
cómo se encuentra diseñado el programa, de forma que pueda ser entendido por una
persona diferente, o por el propio programador algún tiempo después. Los comentarios
son también particularmente útiles, y veces peligrosos, cuando el programa forma parte
de un examen que el profesor debe corregir; ya que el compilador ignora por completo
los comentarios.

Los caracteres (/*) se utilizan para iniciar un comentario introducido entre el


código del programa; el comentario termina con los caracteres (*/). No se puede
introducir un comentario dentro de otro. Todo texto introducido entre los símbolos de
comienzo (/*) y final (*/) de comentario son siempre ignorados por el compilador. Por
ejemplo:

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones
Programa de Formación de la Academia de Software Libre

Nivel: Desarrolladores en Software Libre

Módulo: Lenguaje de Aplicaciones

variable_1 = variable_2;/* En esta línea se asigna


a variable_1 el valor
contenido en variable_2 */

Los comentarios pueden actuar también como separadores de otros tokens propios
del lenguaje C. Una fuente frecuente de errores, no especialmente difíciles de detectar, al
programar en C, es el olvidarse de cerrar un comentario que se ha abierto previamente.

El lenguaje C permite también otro tipo de comentarios, tomado del C++. Todo lo
que va en cualquier línea del código por detrás de la doble barra (//) y hasta el final de la
línea, se considera como un comentario y es ignorado por el compilador. Esta forma es
más cómoda que la anterior para el caso de los comentarios cortos, ya que no hay que
preocuparse de cerrar el comentario, el fin de línea actúa como cierre. En cambio, si un
comentario ocupa varias líneas hay que repetir la doble barra (//) en cada una de éstas.
El último ejemplo podría ponerse en la forma con este segundo procedimiento de
introducir comentarios:

variable_1 = variable_2; // En esta línea se asigna a


// variable_1 el valor
// contenido en variable_2

Pág. 18 Curso: Lenguaje C Unidad 2: Tipo de datos y


operaciones

Вам также может понравиться