Bitovsko ogledalo

Bitovsko ogledalo je proces u kojem se redosled bitova broja obrće, tj. najviši bit postaje najniži, drugi po redu bit postaje drugi od kraja i tako dalje.

Ulaz

Napisati funkciju unsigned bitovsko_ogledalo(unsigned x) koja obrće zapis broja x. Testirati funkciju pozivom u main-u. Broj x se unosi sa standarnog ulaza.

Izlaz

Na standarni izlaz ispisati binarnu reprezentaciju broja x i novodobijnog broja.

Primer 1

Ulaz

255

Izlaz

00000000000000000000001001010101
10101010010000000000000000000000

Primer 2

Ulaz

-15

Izlaz

11111111111111111111111111101011
11010111111111111111111111111111

Rešenje

main.c

#include <stdio.h>

void stampaj_bitove(unsigned x)
{
    unsigned mask = 1 << (sizeof(int)*8-1);
    
    while(mask){
		mask & x ? printf("1") : printf("0");
		mask >>= 1;
    }
    putchar('\n');
}

unsigned bitovsko_ogledalo(unsigned x)
{
    unsigned mask = 1 << (sizeof(unsigned)*8 - 1);
    unsigned mask1 = 1;
    unsigned resenje = 0;
    
    while(mask1){
		if (mask1 & x) 
			resenje = resenje ^ mask;
		mask >>= 1;
		mask1 <<= 1;
    }
    
    return resenje;
}

int main()
{
    int x;
    
    scanf("%x", &x);
    
    unsigned k = bitovsko_ogledalo(x);
    
    stampaj_bitove(x);
    stampaj_bitove(k);
    
    return 0;
}