/*
** Copyright (C) Sebastian Pipping <sebastian@pipping.org> and Katrin Lang <mail@katrinlang.de>
** Licensed under GPL v3 or later
**
** 2011-08-13 20:06 UTC+2
*/
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
typedef union _uint_float_t {
unsigned int u;
float f;
} uint_float_t;
static void dump_header() {
printf("Index 31 24 16 8 0\n");
printf(" |");
signed int bit_index = sizeof(int) * 8 - 2;
for (; bit_index >= 0; bit_index--) {
putchar(bit_index % 8 ? '.' : '|');
}
putchar('\n');
}
static void
dump_bits(float f) {
uint_float_t store;
store.f = f;
printf("Data ");
signed int bit_index = sizeof(int) * 8 - 1;
for (; bit_index >= 0; bit_index--) {
const unsigned int mask = (unsigned int)1 << (bit_index - 1);
putchar((store.u & mask) ? '1' : '0');
}
printf(" %7.3ff\n", f);
}
int main(int argc, char ** argv) {
assert(sizeof(unsigned int) == sizeof(float));
dump_header();
for (int i= 1; i<argc; i++){
argv++;
dump_bits(strtof(*argv, 0));
}
dump_header();
return 0;
}