Establecer el estado de un determinado bit Encendido/Apagado [C]

Iniciado por DanielPy, 16 Febrero 2015, 22:07 PM

0 Miembros y 1 Visitante están viendo este tema.

DanielPy

Hola gente.-
El caso es que dado un número ingresado por teclado, y la posición del bit que se desea saber el estado, mostrar Encendido/Apagado, practique y busque información en la web pero no pude dar con la solución.-
Lo que realmente me complica es el patrón para transformar por ej. Si el ingreso  de la posición es 5 la debo transformar a 16 para establecer la máscara, pero no lo encuentro, tal vez esté errado en el concepto, no sé.- 



#include <stdio.h>

int main(void){
unsigned int numero, mask, ch;

printf("\n\n Ingrese un entero sin signo...............:");
scanf("%d", &numero);
while ((ch = getchar()) != EOF && ch != '\n');

printf("\n\n Indique que bits desea saber el estado....:");
scanf("%d", &mask);
while ((ch = getchar()) != EOF && ch != '\n');

mask <<= 2;

printf(numero & mask ? "\n Encendido" : "\n Apagado");

getchar();
return 0;
}


Como siempre muchas gracias por el tiempo que le dediquen.-   

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

crack81

No conozco el tema me puedes dar mas informacion para ayudarte

saludos...
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

DanielPy

Cita de: crack81 en 16 Febrero 2015, 22:28 PM
No conozco el tema me puedes dar mas informacion para ayudarte

Hola crack81.-
En primer lugar gracias por ocuparte, te dejo un ej.

312 en decimal ==> 100111000 en binario.-
Como puedo hacer para mostrar el estado del bits 5 en este caso encendido.-
Espero  que ahora puedas ayudarme.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

patilanz

No te entiendo muy bien pero si quieres comprobar si un bit esta activo puedes hacer algo como esto:

int bytes = 0x00100100;//6 activo
if((bytes) & (1 << 0x00000100)){
   \\6 bytes activo
}


Para activar uno:


int bytes = 0x00100100;
int bytes2 = bytes | 0x1;


Saludos

Blaster

Cita de: DanielC# en 16 Febrero 2015, 22:48 PM
312 en decimal ==> 100111000 en binario.-
Como puedo hacer para mostrar el estado del bits 5 en este caso encendido.-

Solo necesitas asignar a mask el resultado de desplazar 1 a la posición donde quieres verificar el estado del bit .

int pos = 5, mask = 1 << pos, numero = 312;

if(numero & mask)
   puts("Encendido");
else
   puts("Apagado");
 

Un Saludo

DanielPy

Hola.
Patilanz, gracias por la ayuda, no pude aplicar tú código porque en ese momento estaba ocupado y al consultar el foro encontré lo de Blaster y me saltee el tuyo.-
Blaster, gracias amigo funciona a la perfección, casi te consulto porque para mí el bits más a la derecha empezaba en uno y parece que comienza en cero.-

#include <stdio.h>

int main(void){
int pos = 0, mask = 1, numero = 312, i;

printf("\n\n 312 ==> 100111000\n\n");
for(i=0; i<9; i++){
mask = 1 << pos;
if(numero & mask)
printf("\n bit %d ==> Encendido", i);
else
printf("\n bit %d ==> Apagado", i);
pos++;
}
getchar();
return 0;
}




Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-