Curso de Programación en C/Prog126

De WikiCabal
< Curso de Programación en C
Revisión del 09:29 14 oct 2012 de Rrc (discusión | contribuciones) (Resultado)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Ir a la navegación Ir a la búsqueda

Prog126

  1 #include <stdio.h>
  2 
  3 int main( void )
  4 {
  5   /* Bit Fiddling
  6    *
  7    * Bitwise logical operadores, unary operadores
  8    * ~, &,  |   y  ^
  9    *    &=, |=  y  ^=
 10    * >>, >>=, << y <<=
 11    *
 12    */
 13 
 14   unsigned int i,
 15 	       Num;
 16 
 17   puts( "\nOnes Complement o Bitwise negación o Not operador \"~\"" );
 18   for( Num = 4294967295; Num > 4294967284; Num-- )
 19     printf( "\t~%u o ~%x = %u o %x\n", Num, Num, ~Num, ~Num );
 20   puts( "\nPresión <Enter> para continuar" );
 21   while( ( Num = getchar() ) != '\n' );
 22     ;
 23 
 24   puts( "\nBitwise AND \"&\"" );
 25   for( Num = 0xffff; Num > 0xfff4; Num-- )
 26     printf( "\t(65535 & %d) o (ffff & %x) = %u o %x\n",
 27 		                Num, Num, 0xffff & Num, 0xffff & Num );
 28   puts( "\nPresión <Enter> para continuar" );
 29   while( ( Num = getchar() ) != '\n' );
 30     ;
 31   puts( "Puedes usar el operador \"&=\" también" );
 32   Num = 0xffff;
 33   Num &= 0xfff5;
 34   printf( "Num &= 0xfff5 nos da %x\n", Num );
 35   puts( "\nPresión <Enter> para continuar" );
 36   while( ( Num = getchar() ) != '\n' );
 37     ;
 38 
 39   puts( "\nBitwise OR \"|\"" );
 40   for( Num = 0; Num < 11; Num++ )
 41     printf( "\t(0 | %d) o (0000 | %x) = %u o %x\n",
 42 		                Num, Num, 0 | Num, 0 | Num );
 43   puts( "\nPresión <Enter> para continuar" );
 44   while( ( Num = getchar() ) != '\n' );
 45     ;
 46   puts( "Puedes usar el operador \"|=\" también" );
 47   Num = 0;
 48   Num |= 5;
 49   printf( "Num |= 5 nos da %x\n", Num );
 50   puts( "\nPresión <Enter> para continuar" );
 51   while( ( Num = getchar() ) != '\n' );
 52     ;
 53 
 54   puts( "\nBitwise XOR \"^\"" );
 55   for( Num = 65535; Num > 65524; Num-- )
 56     printf( "\t(65535 ^ %d) o (ffff ^ %x) = %u o %x\n",
 57 		                Num, Num, 65535 ^ Num, 65535 ^ Num );
 58   puts( "\nPresión <Enter> para continuar" );
 59   while( ( Num = getchar() ) != '\n' );
 60     ;
 61   puts( "Puedes usar el operador \"^=\" también" );
 62   Num = 65535;
 63   Num ^= 65528;
 64   printf( "Num ^= 65528 nos da %x\n", Num );
 65   puts( "\nPresión <Enter> para continuar" );
 66   while( ( Num = getchar() ) != '\n' );
 67     ;
 68 
 69   puts( "Existe el shift al ezquierda operador \"<<\"" );
 70   Num = 0xffffffff;
 71   printf( "\t(Num << 1) Nos da %x y después Num = %x\n", (Num << 1), Num );
 72   printf( "\t(Num << 2) Nos da %x y después Num = %x\n", (Num << 2), Num );
 73   printf( "\t(Num << 3) Nos da %x y después Num = %x\n", (Num << 3), Num );
 74   puts( "\nPresión <Enter> para continuar" );
 75   while( ( Num = getchar() ) != '\n' );
 76     ;
 77   puts( "Puedes usar el operador \"<<=\" también" );
 78   Num = 0xffffffff;
 79   for( i = 1; i < 9; i++ )
 80   {
 81     Num <<= i;
 82     printf( "\tDespués de (Num <<= %d), "
 83             "Num se cambio a %08x en manera permanente\n", i, Num );
 84   }
 85   puts( "\nPresión <Enter> para continuar" );
 86   while( ( Num = getchar() ) != '\n' );
 87     ;
 88 
 89   puts( "Existe el shift a la derecha operador \">>\"" );
 90   Num = 0xffffffff;
 91   printf( "\t(Num >> 1) Nos da %x y después Num = %x\n", (Num >> 1), Num );
 92   printf( "\t(Num >> 2) Nos da %x y después Num = %x\n", (Num >> 2), Num );
 93   printf( "\t(Num >> 3) Nos da %x y después Num = %x\n", (Num >> 3), Num );
 94   puts( "\nPresión <Enter> para continuar" );
 95   while( ( Num = getchar() ) != '\n' );
 96     ;
 97   puts( "Puedes usar el operador \">>=\" también" );
 98   Num = 0xffffffff;
 99   for( i = 1; i < 9; i++ )
100   {
101     Num >>= i;
102     printf( "\tDespués de (Num >>= %d), "
103             "Num se cambio a %08x en manera permanente\n", i, Num );
104   }
105   return 0;
106 }

Resultado

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

Ones Complement o Bitwise negación o Not operador "~"
	~4294967295 o ~ffffffff = 0 o 0
	~4294967294 o ~fffffffe = 1 o 1
	~4294967293 o ~fffffffd = 2 o 2
	~4294967292 o ~fffffffc = 3 o 3
	~4294967291 o ~fffffffb = 4 o 4
	~4294967290 o ~fffffffa = 5 o 5
	~4294967289 o ~fffffff9 = 6 o 6
	~4294967288 o ~fffffff8 = 7 o 7
	~4294967287 o ~fffffff7 = 8 o 8
	~4294967286 o ~fffffff6 = 9 o 9
	~4294967285 o ~fffffff5 = 10 o a

Presión <Enter> para continuar


Bitwise AND "&"
	(65535 & 65535) o (ffff & ffff) = 65535 o ffff
	(65535 & 65534) o (ffff & fffe) = 65534 o fffe
	(65535 & 65533) o (ffff & fffd) = 65533 o fffd
	(65535 & 65532) o (ffff & fffc) = 65532 o fffc
	(65535 & 65531) o (ffff & fffb) = 65531 o fffb
	(65535 & 65530) o (ffff & fffa) = 65530 o fffa
	(65535 & 65529) o (ffff & fff9) = 65529 o fff9
	(65535 & 65528) o (ffff & fff8) = 65528 o fff8
	(65535 & 65527) o (ffff & fff7) = 65527 o fff7
	(65535 & 65526) o (ffff & fff6) = 65526 o fff6
	(65535 & 65525) o (ffff & fff5) = 65525 o fff5

Presión <Enter> para continuar

Puedes usar el operador "&=" también
Num &= 0xfff5 nos da fff5

Presión <Enter> para continuar


Bitwise OR "|"
	(0 | 0) o (0000 | 0) = 0 o 0
	(0 | 1) o (0000 | 1) = 1 o 1
	(0 | 2) o (0000 | 2) = 2 o 2
	(0 | 3) o (0000 | 3) = 3 o 3
	(0 | 4) o (0000 | 4) = 4 o 4
	(0 | 5) o (0000 | 5) = 5 o 5
	(0 | 6) o (0000 | 6) = 6 o 6
	(0 | 7) o (0000 | 7) = 7 o 7
	(0 | 8) o (0000 | 8) = 8 o 8
	(0 | 9) o (0000 | 9) = 9 o 9
	(0 | 10) o (0000 | a) = 10 o a

Presión <Enter> para continuar

Puedes usar el operador "|=" también
Num |= 5 nos da 5

Presión <Enter> para continuar


Bitwise XOR "^"
	(65535 ^ 65535) o (ffff ^ ffff) = 0 o 0
	(65535 ^ 65534) o (ffff ^ fffe) = 1 o 1
	(65535 ^ 65533) o (ffff ^ fffd) = 2 o 2
	(65535 ^ 65532) o (ffff ^ fffc) = 3 o 3
	(65535 ^ 65531) o (ffff ^ fffb) = 4 o 4
	(65535 ^ 65530) o (ffff ^ fffa) = 5 o 5
	(65535 ^ 65529) o (ffff ^ fff9) = 6 o 6
	(65535 ^ 65528) o (ffff ^ fff8) = 7 o 7
	(65535 ^ 65527) o (ffff ^ fff7) = 8 o 8
	(65535 ^ 65526) o (ffff ^ fff6) = 9 o 9
	(65535 ^ 65525) o (ffff ^ fff5) = 10 o a

Presión <Enter> para continuar

Puedes usar el operador "^=" también
Num ^= 65528 nos da 7

Presión <Enter> para continuar

Existe el shift al ezquierda operador "<<"
	(Num << 1) Nos da fffffffe y después Num = ffffffff
	(Num << 2) Nos da fffffffc y después Num = ffffffff
	(Num << 3) Nos da fffffff8 y después Num = ffffffff


Presión <Enter> para continuar

Puedes usar el operador "<<=" también
        Después de (Num <<= 1), Num se cambio a fffffffe en manera permanente
        Después de (Num <<= 2), Num se cambio a fffffff8 en manera permanente
        Después de (Num <<= 3), Num se cambio a ffffffc0 en manera permanente
        Después de (Num <<= 4), Num se cambio a fffffc00 en manera permanente
        Después de (Num <<= 5), Num se cambio a ffff8000 en manera permanente
        Después de (Num <<= 6), Num se cambio a ffe00000 en manera permanente
        Después de (Num <<= 7), Num se cambio a f0000000 en manera permanente
        Después de (Num <<= 8), Num se cambio a 00000000 en manera permanente

Presión <Enter> para continuar

Existe el shift a la derecha operador ">>"
        (Num >> 1) Nos da 7fffffff y después Num = ffffffff
        (Num >> 2) Nos da 3fffffff y después Num = ffffffff
        (Num >> 3) Nos da 1fffffff y después Num = ffffffff

Presión <Enter> para continuar

Puedes usar el operador ">>=" también
        Después de (Num >>= 1), Num se cambio a 7fffffff en manera permanente
        Después de (Num >>= 2), Num se cambio a 1fffffff en manera permanente
        Después de (Num >>= 3), Num se cambio a 03ffffff en manera permanente
        Después de (Num >>= 4), Num se cambio a 003fffff en manera permanente
        Después de (Num >>= 5), Num se cambio a 0001ffff en manera permanente
        Después de (Num >>= 6), Num se cambio a 000007ff en manera permanente
        Después de (Num >>= 7), Num se cambio a 0000000f en manera permanente
        Después de (Num >>= 8), Num se cambio a 00000000 en manera permanente

[rrc@AbelLap CClase]$ 

Explicación