Curso de Programación en C/Prog128

De WikiCabal
Ir a la navegación Ir a la búsqueda

Prog128

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 int main( void )
 6 {
 7   unsigned char Mascara   = 0x00,
 8                 Semaforos;
 9 
10   char Buf[7];
11 
12   int  i,
13        Prueba;
14 
15   puts( "\nEl bitwise OR esta usado a veces a" );
16   puts( "prender algunas bits en un entero\n" );
17   printf( "Dame un número positivo entre 0 y 255: " );
18   while( fgets( Buf, 5, stdin ) && Buf[0] != '\n' )
19   {
20     if( *(Buf + strlen( Buf ) -1 ) != '\n' )
21     {
22       fputs( "La línea que entraste es demaciado largo.\nSolo 3 chars MAX",
23                                                                      stderr );
24       exit(1);
25     }
26     *(Buf + strlen( Buf ) -1 ) = '\0';
27 
28     for( i = 0; i < strlen( Buf ); i++ )
29     {
30       if( Buf[i] < '0' || Buf[i] > '9' )
31       {
32         fputs( "Caracteres ilegales en su ingreso\n", stderr );
33         exit(1);
34       }
35     }
36 
37     Prueba = atoi( Buf);
38     if( Prueba > 255 )
39     {
40       fputs( "Su entrada está fuera del rango especificado\n", stderr );
41       exit(1);
42     }
43 
44     for( i = 1; i <= 8; i++ )
45     {
46       if( i == 1 )
47         Mascara = 0x01;
48       else
49         Mascara <<= 1;
50 
51       Semaforos = Prueba;
52       Semaforos |= Mascara;
53       printf( "Su número %d se cambia a %d cuando bit %d está prendida\n",
54                                                   Prueba, Semaforos, i -1 );
55     }
56     printf( "\nDame un número positivo entre 0 y 255"
57             " (<Enter> para terminar): " );
58   }
59   return 0;
60 }

Resultado

[rrc@AbelLap CClase]$ gcc -Wall -o Prog128 Prog128.c
[rrc@AbelLap CClase]$ ./Prog128

El bitwise OR esta usado a veces a
prender algunas bits en un entero

Dame un número positivo entre 0 y 255: 0
Su número 0 se cambia a 1 cuando bit 0 está prendida
Su número 0 se cambia a 2 cuando bit 1 está prendida
Su número 0 se cambia a 4 cuando bit 2 está prendida
Su número 0 se cambia a 8 cuando bit 3 está prendida
Su número 0 se cambia a 16 cuando bit 4 está prendida
Su número 0 se cambia a 32 cuando bit 5 está prendida
Su número 0 se cambia a 64 cuando bit 6 está prendida
Su número 0 se cambia a 128 cuando bit 7 está prendida

Dame un número positivo entre 0 y 255 (<Enter> para terminar): 1
Su número 1 se cambia a 1 cuando bit 0 está prendida
Su número 1 se cambia a 3 cuando bit 1 está prendida
Su número 1 se cambia a 5 cuando bit 2 está prendida
Su número 1 se cambia a 9 cuando bit 3 está prendida
Su número 1 se cambia a 17 cuando bit 4 está prendida
Su número 1 se cambia a 33 cuando bit 5 está prendida
Su número 1 se cambia a 65 cuando bit 6 está prendida
Su número 1 se cambia a 129 cuando bit 7 está prendida

Dame un número positivo entre 0 y 255 (<Enter> para terminar): 2
Su número 2 se cambia a 3 cuando bit 0 está prendida
Su número 2 se cambia a 2 cuando bit 1 está prendida
Su número 2 se cambia a 6 cuando bit 2 está prendida
Su número 2 se cambia a 10 cuando bit 3 está prendida
Su número 2 se cambia a 18 cuando bit 4 está prendida
Su número 2 se cambia a 34 cuando bit 5 está prendida
Su número 2 se cambia a 66 cuando bit 6 está prendida
Su número 2 se cambia a 130 cuando bit 7 está prendida

Dame un número positivo entre 0 y 255 (<Enter> para terminar): 3
Su número 3 se cambia a 3 cuando bit 0 está prendida
Su número 3 se cambia a 3 cuando bit 1 está prendida
Su número 3 se cambia a 7 cuando bit 2 está prendida
Su número 3 se cambia a 11 cuando bit 3 está prendida
Su número 3 se cambia a 19 cuando bit 4 está prendida
Su número 3 se cambia a 35 cuando bit 5 está prendida
Su número 3 se cambia a 67 cuando bit 6 está prendida
Su número 3 se cambia a 131 cuando bit 7 está prendida

Dame un número positivo entre 0 y 255 (<Enter> para terminar): 8
Su número 8 se cambia a 9 cuando bit 0 está prendida
Su número 8 se cambia a 10 cuando bit 1 está prendida
Su número 8 se cambia a 12 cuando bit 2 está prendida
Su número 8 se cambia a 8 cuando bit 3 está prendida
Su número 8 se cambia a 24 cuando bit 4 está prendida
Su número 8 se cambia a 40 cuando bit 5 está prendida
Su número 8 se cambia a 72 cuando bit 6 está prendida
Su número 8 se cambia a 136 cuando bit 7 está prendida

Dame un número positivo entre 0 y 255 (<Enter> para terminar): 16
Su número 16 se cambia a 17 cuando bit 0 está prendida
Su número 16 se cambia a 18 cuando bit 1 está prendida
Su número 16 se cambia a 20 cuando bit 2 está prendida
Su número 16 se cambia a 24 cuando bit 3 está prendida
Su número 16 se cambia a 16 cuando bit 4 está prendida
Su número 16 se cambia a 48 cuando bit 5 está prendida
Su número 16 se cambia a 80 cuando bit 6 está prendida
Su número 16 se cambia a 144 cuando bit 7 está prendida

Dame un número positivo entre 0 y 255 (<Enter> para terminar): 32
Su número 32 se cambia a 33 cuando bit 0 está prendida
Su número 32 se cambia a 34 cuando bit 1 está prendida
Su número 32 se cambia a 36 cuando bit 2 está prendida
Su número 32 se cambia a 40 cuando bit 3 está prendida
Su número 32 se cambia a 48 cuando bit 4 está prendida
Su número 32 se cambia a 32 cuando bit 5 está prendida
Su número 32 se cambia a 96 cuando bit 6 está prendida
Su número 32 se cambia a 160 cuando bit 7 está prendida

Dame un número positivo entre 0 y 255 (<Enter> para terminar): 358
Su entrada está fuera del rango especificado
[rrc@AbelLap CClase]$ 

Explicación