#include <stdio.h>
#include <assert.h>
static unsigned char
reverse_bits8(unsigned char v)
{
v = ((v >> 1) & 0x55) | ((v & 0x55) << 1);
v = ((v >> 2) & 0x33) | ((v & 0x33) << 2);
v = ( v >> 4 ) | ( v << 4);
return v;
}
static void
test_reverse_bit8(void)
{
int i;
unsigned char x;
for (i = 0; i <= 0xff; i++) {
x = (unsigned char)i;
assert(x == reverse_bits8(reverse_bits8(x)));
}
}
static void
output_binary_x(unsigned int n, int x)
{
int i;
for (i = x; i >= 0; i--)
putchar("01"[!!((n >> i) & 1)]);
}
static void
output_binary8(unsigned char n)
{
output_binary_x((unsigned char)n, 7);
}
static void test(void)
{
test_reverse_bit8();
}
int main(void)
{
int i, j;
test();
for (i = 0; i <= 0xff; i++) {
unsigned char A;
A = (unsigned char)i;
output_binary8(A);
printf("(%3d):", i);
for (j = 0; j <= 0xff; j++) {
unsigned char x;
x = (unsigned char)j;
x = x + reverse_bits8(x);
if (x == A) {
output_binary8(j);
putchar(' ');
}
}
printf("\n");
}
return 0;
}