#!/usr/local/bin/tcc -run // http://www.geocities.co.jp/SiliconValley-Bay/7437/c/unsigned.html #include #include int main (int argc, char *argv[]) { union { float f; int i; } target; int i, j, sign, exponent, tmp_mantissa, tmp, tmp2; double mantissa; target.f = atof(argv[1]); printf("float target = %f\n", target.f); for (i = 31; i >= 0; i--) { printf( "%d", ( target.i >> i ) & 1 ); } printf("\n"); sign = ( target.i >> 31 ) & 1; exponent = (( target.i >> 23 ) & 0xff) - 0x7f; tmp_mantissa = (target.i & 0x7ffFFF) << 9; mantissa = 0; tmp2 = 1; for (i = 31; i >= 9; i--) { tmp2 = tmp2 * 2; tmp = ( tmp_mantissa >> i ) & 1; mantissa = mantissa + (double)tmp / (double)tmp2; } printf("sign : %d\n", sign); printf("exponent : %d\n", exponent); printf("mantissa : %f\n", mantissa); return 0; }