C-Kurs/ieee754/Musterlösung
< C-Kurs | ieee754
Version vom 14. September 2012, 17:00 Uhr von Nighoo (Diskussion | Beiträge) (bugfix, lösung war nicht richtig)
/* ** 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); 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; }