/* a9-4-3.c */
#include <stdio.h>
#include <limits.h>

unsigned reverse_bit(unsigned dt);
void show_bit(unsigned dt);

int main(void)
{
    unsigned a, b;

	printf("0 〜 %#x の16進数を入力してください。＞ ", UINT_MAX);
	scanf("%x", &a);
    show_bit(a);
	b = reverse_bit(a);
    show_bit(b);

    return 0;
}
/*** ビット反転関数 ***/
/*（仮引数）dt：データ　（返却値）反転データ */
unsigned reverse_bit(unsigned dt)
{
    unsigned mask = 1U, bit, rb = 0U;
    int i, len;

    len = sizeof(dt) * CHAR_BIT;
    mask <<= len - 1;
    
    for (i = 0; i < len; i++) {
        bit = (dt & mask) ? 1U : 0U;
        bit <<= i;
        rb |= bit;
        mask >>= 1;
    }
    return rb;
}
/*** ビット表示関数 ***/
/*（仮引数）dt：表示データ */
void show_bit(unsigned dt)
{
    int i, len;

    len = sizeof(dt) * CHAR_BIT;
        
    printf("%#x ---> ", dt);
    for (i = len - 1; i >= 0; i--){
        putchar((dt >> i & 1U) ? '1' : '0' );
    }
    putchar('\n');
}
