Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Decimal a binario con operador AND[C]

Estas en el tema de Decimal a binario con operador AND[C] en el foro de C/C++ en Foros del Web. Hola a todos. Lo que deseo hacer es mostrar por pantalla lo mismo que aparece en la foto, o sea que de un entero aparezca ...
  #1 (permalink)  
Antiguo 09/10/2014, 13:35
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Decimal a binario con operador AND[C]

Hola a todos.
Lo que deseo hacer es mostrar por pantalla lo mismo que aparece en la foto, o sea que de un entero aparezca en pantalla la representación binaria del mismo, pero únicamente con el operador AND, ¿es esto posible? Y si lo es ¿Cuál es el error en mi programa?.-



Código:
#include<stdio.h>

int main(void){
	int mask=1, a=101, bit=0, i;
	for(i=0; i<7; i++){
		bit = a & mask;
		printf("%d ", bit);
		mask *=10;
	}

	return 0;
}


Saludos.
Daniel
  #2 (permalink)  
Antiguo 09/10/2014, 20:35
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Decimal a binario con operador AND[C]

Hola a todos.
Ufffffffffffff, tanto buscar y practicar y era tan fácil como respirar, lograrlo.-
Lo que quiero hacer es multiplicar 2 cifras alojadas en sendas cadenas, con un bucle de sumas ya lo logré y ahora intento hacerlo byte a byte, de tanto buscar en internet encontré un video donde decía que para saber la correspondencia de un número binario a decimal se asía algo como esto,

1 1 0 1 0 en binario
16 8 4 2 1
Se debe sumar sólo los bit encendidos o sea 2 + 8 + 16 = 26
11010 en binario es 26 en decimal.-

Código C:
Ver original
  1. #include<stdio.h>
  2.  
  3. int main(void){
  4.     int ingreso=87, bits=64, i, entero=0;
  5.     printf("\n\n binario ");
  6.    
  7.     for(i=0; bits > 0; i++){
  8.         if(ingreso & bits){
  9.             printf("1");
  10.             entero += bits;
  11.         }
  12.         else{
  13.             printf("0");
  14.         }
  15.         bits /=2;
  16.     }
  17.    
  18.     printf(" ==> decimal %d\n\n", entero);
  19.    
  20.     return 0;
  21. }

Saludos.
Daniel
  #3 (permalink)  
Antiguo 10/10/2014, 00:57
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 9 meses
Puntos: 204
Respuesta: Decimal a binario con operador AND[C]

Si haces desplazamientos binarios puedes simplificar un poco el código... sobretodo porque ya no necesitas "magic numbers" en tu código.

Código C:
Ver original
  1. #include<stdio.h>
  2.  
  3. int main(void)
  4. {
  5.   int ingreso=87, mask = 1, i, entero=0;
  6.    
  7.   for(i=0; i < 32; i++)
  8.   {
  9.     if ( ingreso & mask )
  10.       entero += mask;
  11.  
  12.     mask <<= 1;
  13.   }
  14.    
  15.    printf(" ==> decimal %d\n\n", entero);
  16.    
  17.    return 0;
  18. }

Claro que si tu idea es ir sacando el binario sobre la marcha también puedes usar limits.h para calcular el número de bits que tienes que imprimir:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <limits.h>
  3.  
  4. int main(void)
  5. {
  6.   int ingreso=87, entero=0;
  7.   unsigned int mask = UINT_MAX - INT_MAX; // Esto equivale a activar únicamente el bit de mayor peso
  8.  
  9.   printf( "\n\nbinario " );
  10.   while( mask )
  11.   {
  12.     if ( ingreso & mask )
  13.       entero += mask;
  14.  
  15.     if ( entero != 0 )
  16.       printf( "%d", (ingreso&mask)? 1 : 0 );
  17.     mask >>= 1;
  18.   }
  19.  
  20.    printf(" ==> decimal %d\n\n", entero);
  21.  
  22.    return 0;
  23. }

PD.: el código está pensado para que únicamente muestre los bits significativos (omite los '0' a la izquierda)
  #4 (permalink)  
Antiguo 10/10/2014, 20:38
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Decimal a binario con operador AND[C]

Hola eferion.
Gracias por responder y el aporte.-
Ya que estamos te voy a efectuar una consulta, ¿con el desplazamiento puedo acceder a cualquier bit y modificarlo?.-
Como ejemplo, es conocido que si una letra tiene el quinto bit encendido es minúscula y si lo apagamos se transforma en mayúscula.-
Puedo con el desplazamiento acceder al quinto bits y modificarlo o se debe hacer únicamente con uniones y campos de bit.-

Saludos.
Daniel
  #5 (permalink)  
Antiguo 12/10/2014, 02:21
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 9 meses
Puntos: 204
Respuesta: Decimal a binario con operador AND[C]

El problema que tiene el desplazamiento binario es que pierdes información. Si desplazas a la derecha, el bit más a la derecha se pierde y se crea un hueco a la izquierda... que se rellena con un '0' y lo mismo pasa con los desplazamientos a la izquierda.

Respondiendo a tu duda, si sabes que el 5º bit es el encargado de efectuar ese cambio puedes hacer lo siguiente:

Código C:
Ver original
  1. char letra='h';
  2. char mascara = 1 << 5; // esto es equivalente a 0x20 o 0100000
  3.  
  4. // Si aplicamos una operación XOR alternaremos entre mayúsculas y minúsculas
  5. letra ^= mascara;
  6. printf( "%c" letra); // Imprime H
  7.  
  8. // Si aplicamos una operación OR cambiaremos de mayúscuas a minúsculas
  9. letra |= mascara;
  10. printf( "%c" letra); // Imprime h
  11.  
  12. // Para apagar el bit hay que invertir la máscara y realizar una operación AND
  13. mascara ^= 0xFF;
  14. letra &= mascara;
  15. printf( "%c" letra); // Imprime H

Ahora mismo no puedo compilar, pero creo que el código está bien.
  #6 (permalink)  
Antiguo 12/10/2014, 11:06
RoDaVi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Decimal a binario con operador AND[C]

Hola eferion.
Cita:
Ahora mismo no puedo compilar, pero creo que el código está bien.
Código C:
Ver original
  1. printf( "%c" letra);
Te faltaron las comas en todos los printf antes de la variable letra.
Gracias y es muy esclarecedor tu aporte.-

Saludos.
Daniel
  #7 (permalink)  
Antiguo 12/10/2014, 12:33
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 9 meses
Puntos: 204
Respuesta: Decimal a binario con operador AND[C]

Cita:
Iniciado por RoDaVi Ver Mensaje
Hola eferion.

Código C:
Ver original
  1. printf( "%c" letra);
Te faltaron las comas en todos los printf antes de la variable letra.
Cosas del copipaste jejejeje.

Mientras te aclare las dudas yo por mi encantado :)

Un saludo.

Etiquetas: binario, decimal, int, operador, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:08.