/*
Implementar una funcion que pase de enteros a binarios con mascaras de bits
*/
#include<stdio.h>
void bitprint (int n);
void c2 (int n);
int main(int argc,char *argv[]){
int k;
printf("Introduce un número: ");
scanf("%d", &k);
bitprint(k);
c2(k);
return 0;
}
void bitprint (int n){
int i, mascara;
mascara = 1; /* 00...001 */
mascara = mascara << ((sizeof(int) * 8) - 1); /* 10...000 */
/* se desplaza el "bit" 1 hacia
el extremo más significativo */
for ( i = 0; i < (sizeof(int) * 8); ++i ) {
/* alternativa al if..else */
/* putchar( ((n & mascara)==0) ? '0' : '1' ); */
if(!( n & mascara))
{
printf("0");
}
else
{
printf("1");
}
/* Otra opción :
if( n & mascara)
{
printf("1");
}
else
{
printf("0");
}
*/
n=n<<1;
}
printf("\n");
return;
}
void c2 (int n){
int i, mascara, ceros=1;
mascara = 1; /* 00...001 */
/* Recorro los bits del número */
for ( i = 0; i < (sizeof(int) * 8); ++i ) {
if( n & mascara)
{
if(ceros==1){
ceros=0;
}
else
n=n&(~mascara);
}
else
{
if(ceros==0){
n=n|mascara;
}
}
mascara=mascara<<1;
}
printf("El número negativo es %d\n", n);
bitprint(n);
return;
}