Page 43

1 Introducci´on a C

CC 2003, 2008 Andr´ es Marzal e Isabel Gracia

Lecturas m´ ultiples con scanf No te hemos contado todo sobre scanf . Puedes usar scanf para leer m´ as de un valor. Por ejemplo, este programa lee dos valores enteros con un solo scanf :

lectura multiple.c

lectura multiple.c 1

#include <stdio.h>

2 3 4 5 6 7 8 9 10

int main(void) { int a, b; printf ("Introduce dos enteros: "); scanf ("%d %d", &a, &b); printf ("Valores le´ ıdos: %d y %d\n", a, b); return 0; }

Tambi´en podemos especificar con cierto detalle c´ omo esperamos que el usuario introduzca la informaci´ on. Por ejemplo, con scanf ("%d-%d", &a, &b) indicamos que el usuario debe separar los enteros con un gui´ on; y con scanf ("(%d,%d)", &a, &b) especificamos que esperamos encontrar los enteros encerrados entre par´entesis y separados por comas. Lee la p´ agina de manual de scanf (escribiendo man 3 scanf en el int´erprete de ´ ordenes Unix) para obtener m´ as informaci´ on.

y ^ son operadores binarios. El operador & devuelve un valor cuyo n-´esimo bit es 1 si y s´olo si los dos bits de la n-´esima posici´on de los operandos son tambi´en 1. El operador | devuelve 0 en un bit si y solo si los correspondientes bits en los operandos son tambi´en 0. El operador ^ devuelve 1 si y s´olo si los correspondientes bits en los operandos son diferentes. Lo entender´ as mejor con un ejemplo. Imagina que a y b son variables de tipo char que valen 6 y 3, respectivamente. En binario, el valor de a se codifica como 00000110 y el valor de b como 00000011. El resultado de a | b es 7, que corresponde al valor en base diez del n´ umero binario 000000111. El resultado de a & b es, en binario, 000000010, es decir, el valor decimal 2. El resultado binario de a ^ b es 000000101, que en base 10 es 5. Finalmente, el resultado de ~a es 11111001, es decir, −7 (recuerda que un n´ umero con signo est´ a codificado en complemento a 2, as´ı que si su primer bit es 1, el n´ umero es negativo). Los operadores de desplazamiento desplazan los bits un n´ umero dado de posiciones a izquierda o derecha. Por ejemplo, 16 como valor de tipo char es 00010000, as´ı que 16 << 1 es 32, que en binario es 00100000, y 16 >> 1 es 8, que en binario es 00001000. Operadores de bits y programaci´ on de sistemas C presenta una enorme colecci´ on de operadores, pero quiz´ a los que te resulten m´ as llamativos sean los operadores de bits. Dif´ıcilmente los utilizar´ as en programas convencionales, pero son insustituibles en la programaci´ on de sistemas. Cuando manejes informaci´ on a muy bajo nivel es probable que necesites acceder a bits y modificar sus valores. Por ejemplo, el control de ciertos puertos del ordenador pasa por leer y asignar valores concretos a ciertos bits de direcciones virtuales de memoria. Puede que poner a 1 el bit menos significativo de determinada direcci´ on permita detener la actividad de una impresora conectada a un puerto paralelo, o que el bit m´ as significativo nos alerte de si falta papel en la impresora. Si deseas saber si un bit est´ a o no activo, puedes utilizar los operadores & y <<. Para saber, por ejemplo, si el octavo bit de una variable x est´ a activo, puedes calcular x & (1 << 7). Si el resultado es cero, el bit no est´ a activo; en caso contrario, est´ a activo. Para fijar a 1 el valor de ese mismo bit, puedes hacer x = x | (1 << 7). Los operadores de bits emulan el comportamiento de ciertas instrucciones disponibles en los lenguajes ensambladores. La facilidad que proporciona C para escribir programas de ((bajo nivel)) es grande, y por ello C se considera el lenguaje a elegir cuando hemos de escribir un controlador para un dispositivo o el c´ odigo de un sistema operativo.

Introducci´ on a la Programaci´ on con C

37

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement