32-bit unsigned 실수를 binary 로 변환할 필요가 있었는데

무식하게 노트에다가 손으로 열심히 계산을 햇다. -_-;

결과 몇자리 지나니까 계산이 틀려버렸다 ㅡ0ㅡ

하도 답답했던지 옆에 후배가 C로 짜라고 하길래 혹시나 해서 짰다.

근데 ANSI C에서 이런거 제공안해주나...

에이 괜히 하루종일 계산만 하고 앉아있었네 ㅡㅡ

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void integer_conv (int num)

 int bin[32] = {0,};
 int i;
 
 for ( i = 0 ; i < 32 ;  i++)
 {
  bin[31-i] = num % 2;
  num = num >> 1;
  if (num < 2) break;
 }
 for ( i = 0 ; i < 32 ; i++)
  printf ("%d",bin[i]);
}

void frac_conv (float num)
{
   int bin[32] = {0,};
 int i;
 for ( i = 0 ; i < 32 ; i++)
 {
  num = num * 2.0;
  bin[i] = 0;
  if (num > 1.0)
  {
   bin[i] = 1;
   num = num - 1.0;
  }
  printf ("%d",bin[i]);
 }
}

int main(int argc, char* argv[])
{
 float num;
 int i;

 if (argc != 2)
 {
  printf ("Usage : float_to_bin [32-bit float number] \n");
  exit(-1);
 } 
 num = atof(argv[1]);
 integer_conv(floor(num));
 printf (".");
 frac_conv(num - floor(num)); 
 printf ("\n");

 return 1;
}


저작자 표시 비영리