/* * Program to display internal representation of floating-point number. */ #include #include #include void print_byte_as_binary(unsigned char c) { char one_byte[CHAR_BIT]; for (int b = CHAR_BIT-1; b >= 0; --b) { one_byte[b] = (c & 1) ? '1' : '0'; c = c >> 1; } for (int b = 0; b < CHAR_BIT; ++b) { putchar(one_byte[b]); } } void print_as_binary(void * memptr, int num_bytes) { unsigned char * p = (unsigned char *) memptr; printf("in binary (low byte first): "); for (int i = 0; i < num_bytes; ++i) { print_byte_as_binary((unsigned char) p[i]); putchar(' '); } putchar('\n'); printf("in binary (high byte first): "); for (int i = num_bytes-1; i >= 0; --i) { print_byte_as_binary((unsigned char) p[i]); putchar(' '); } putchar('\n'); } int main(void) { float f; double d; int i; printf("enter a floating-point number:\n"); if (scanf("%f", &f) != 1) { printf("error -- not numeric\n"); return EXIT_FAILURE; } d=f; i=f; printf("float %f:\n", f); print_as_binary(&f, sizeof f); printf("double %f:\n", d); print_as_binary(&d, sizeof d); printf("integer %d:\n", i); print_as_binary(&i, sizeof i); return EXIT_SUCCESS; }