determinar si un bit esta apagado/encendido.-

Aqui pregunta tus dudas acerca de tus programas en C/C++

Moderador: AntonioG

determinar si un bit esta apagado/encendido.-

Notapor DanielC » Mar Jun 01, 2010 1:02 am

Hola a todos.-(hola Antonio)
Alguien me puede explicar como llega el programa a determinar si el bit esta apagado o encendido, ya se sabe que el operador &(AND) compara los bits dos a dos. Si ambos son 1 el resultado es 1. Si no, el resultado es cero.-

Código: Seleccionar todo
Ej. el decimal 12 en binario es = 1100
         el bit 4 en binario es = 0100
                              & = 0100


En este caso el bit 4 esta encendido.-(asi tambien lo muestra el programa)
En primer lugar es esta la manera de determinar si el bit esta encendido/apagado y luego cual es la lógica para que el programa lo sepa?.-

Código: Seleccionar todo
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
   int bits,ing = 0;
   printf("\n\tIngrese un entero................................:");
   scanf("%d",&ing);
   printf("\n\tQue bit desea saber si esta apagado o encendido..:");
   scanf("%d",&bits);
   ing & bits?printf("\n\tEncendido\n\t"):printf("\n\tApagado\n\t");
       
   system("PAUSE");   
   return 0;
}

Alguien me puede dar alguna idea?.-

Saludos.
Daniel
Avatar de Usuario
DanielC
Colaborador
Colaborador
adicto al foro
adicto al foro
 
Mensajes: 69
Registrado: Mié Ene 28, 2009 10:22 am
Ubicación: Argentina

Re: determinar si un bit esta apagado/encendido.-

Notapor AntonioG » Jue Jun 03, 2010 7:01 pm

Hola,

Para saber cual bit está o no apagado, primero vamos a decir que los bts los numeramos de derecha a izquierda, comenzando del 0:
número en binario: 10101
número de bit: 43210 <- e primer bit es el más a la derecha

Ahora, si pregunto por el bit 2, deberia poner 4 en decimal corresponde en binario a 100 (bit 2 encendido, bit 1 y 0 apagados). Si quiere en bit 4, debo poner el 16, que en binario es 10000 (bit 4 encendido, bits del 0 al 3 apagados).

Para no batallar en que número en decimal debemos poner, sólo debemos notar que para preguntar por el bit k, el número en decimal correspondiente es 2^k (el 2 multiplicado k veces por si mismo, y recordando que 2^0=1), y ese número se obtiene con esta función:

Código: Seleccionar todo
int bit_a_decimal(int nbit)
   {
   int i,d=1;
   for(i=0;i<nbit;i++)
      d*=2;
   return d;
   }


De esta manera, tu programa principal queda asi:

Código: Seleccionar todo
    #include <stdio.h>
    #include <stdlib.h>


   
int bit_a_decimal(int nbit)
   {
   int i,d=1;
   for(i=0;i<nbit;i++)
      d*=2;
   return d;
   }



    int main(int argc, char *argv[])
    {
       int nbit,ing = 0;
       printf("\n\tIngrese un entero................................:");
       scanf("%d",&ing);
       printf("\n\tQue bit desea saber si esta apagado o encendido..:");
       scanf("%d",&nbit);
       ing & bit_a_decimal(nbit)?printf("\n\tEncendido\n\t"):printf("\n\tApagado\n\t");
           
       system("PAUSE");   
       return 0;
    }


Entonces, para el número 12 (1100), te debe decir que
bit
0 apagado
1 apagado
2 encendido
3 encendido
4 en adelante apagado

Saludos!
Avatar de Usuario
AntonioG
Moderador
Moderador
Usuario veterano
Usuario veterano
 
Mensajes: 278
Registrado: Jue Ene 15, 2009 12:57 am

Re: determinar si un bit esta apagado/encendido.-

Notapor DanielC » Vie Jun 04, 2010 4:30 pm

Hola Antonio.-
Gracias por tu respuesta y muy buena la explicación, como siempre el programa funciona perfecto.-

Saludos.
Daniel
Avatar de Usuario
DanielC
Colaborador
Colaborador
adicto al foro
adicto al foro
 
Mensajes: 69
Registrado: Mié Ene 28, 2009 10:22 am
Ubicación: Argentina


Volver a Programación en C/C++



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados