double データのビット・パターンを , からなる文字列 (型名を bdsd) に変換する関数 void double_to_bdsd(double, bdsd) と、 bsds データを表示する void print_bdsd(bdsd) を用意した。
bdsd.h |
/* * bdsd.h */ #define NUM_BIN_DIGITS_DOUBLE 64 typedef char bin_digit_string_double[NUM_BIN_DIGITS_DOUBLE+1]; typedef bin_digit_string_double bdsd; void double_to_bin_digits(double, bdsd); void print_bdsd(bdsd); |
bdsd.c |
/* * bdsd.c */ #define NUM_BIN_DIGITS_INT 32 typedef char bds_int[NUM_BIN_DIGITS_INT+1]; #include <stdio.h> #include "bdsd.h" static void int_to_bin_digits(int x, bds_int s) { int keta; s[NUM_BIN_DIGITS_INT - 1] = '0' + (x & 1); x = (x >> 1) & 0x7fffffff; for (keta = NUM_BIN_DIGITS_INT - 2; keta >= 0; keta--) { s[keta] = '0' + (x & 1); x = x >> 1; } s[NUM_BIN_DIGITS_INT] = 0; } void double_to_bin_digits(double x, bdsd bds) { union { double x; int xa[2]; } data; data.x = x; int_to_bin_digits(data.xa[1], bds); int_to_bin_digits(data.xa[0], bds+NUM_BIN_DIGITS_INT); } void print_bdsd(bdsd a_bdsd) { int i; printf("%c ", a_bdsd[0]); for (i = 1; i <= 11; i++) putchar(a_bdsd[i]); printf(" %s", a_bdsd + 12); } |
桂田 祐史