// This program demonstrates the impact of cross-representations // by asking the user to enter a floating point value // and then printing it out under different interpretations #include void printlong(long longvalue); int main(void) { float number; long *longptr; float *floatptr; void *voidptr; voidptr = longptr = floatptr = &number; printf("Enter a floating point number: "); scanf("%f", voidptr); printf("float is %i bytes and long is %i bytes.\n", sizeof(float), sizeof(long)); printf("number as a float: %f\n", *(float *)voidptr); printf("number as a long : %li (decimal)\n", *(long *)voidptr); printf("number as a long : 0x%lX (hex)\n", *(long *)voidptr); printf("number as a float: %f\n", number); printf("number as a long : %li (decimal)\n", number); printf("number as a long : 0x%lX (hex)\n", number); printf("number as a float: %f\n", *longptr); printf("number as a long : %li (decimal)\n", *longptr); printf("number as a long : 0x%lX (hex)\n", *longptr); printf("number as a float: %f\n", *floatptr); printf("number as a long : %li (decimal)\n", *floatptr); printf("number as a long : 0x%lX (hex)\n", *floatptr); printf("\n"); printf("Passed as a long:\n"); printlong(*longptr); printf("Passed as a float:\n"); printlong(*floatptr); printf("Passed as a void cast to long:\n"); printlong(*(long *)voidptr); printf("Passed as a void cast to float:\n"); printlong(*(float *)voidptr); printf("Passed as a float cast to long:\n"); printlong(*(long *)floatptr); printf("Passed as a long cast to float:\n"); printlong(*(float *)longptr); return(0); } void printlong(long longvalue) { printf("number as a long : %li (decimal)\n", longvalue); printf("number as a long : 0x%lX (hex)\n", longvalue); return; }