C#에서 실수(float) 값을 이진수(binary) 형태로 변환해야 하는 경우가 종종 있습니다. 이 글에서는 반복문과 나머지 연산을 활용해 float 값을 이진수 문자열로 변환하는 기본적인 방법을 단계별로 살펴보겠습니다.
변환 원리
먼저 다음과 같이 변환할 float 변수를 선언합니다.
float n = 50.5f;
그다음 이진수 결과를 담을 빈 문자열을 준비하고, 변수의 값이 1 미만이 될 때까지 반복하면서 값을 2로 나눈 나머지를 문자열 앞쪽에 계속 추가하는 방식으로 이진수를 구성합니다.
string a = "";
while (n >= 1) {
a = (n % 2) + a;
n = n / 2;
}
전체 예제 코드
using System;
namespace Program {
class Demo {
static void Main(string[] args) {
// float를 이진수로 변환
Console.WriteLine("float to binary = ");
float n = 50.5f;
string a = "";
while (n >= 1) {
a = (n % 2) + a;
n = n / 2;
}
Console.Write(a);
}
}
}
실행 결과
float to binary = 1.5781251.156250.31250.6251.250.5
출력에 소수점이 포함되어 있는 이유는 float 나눗셈 과정에서 소수 부분이 그대로 유지되기 때문입니다. 즉, 위 방식은 소수점 이하를 제대로 처리하지 못하는 근사적인 변환 방법이라는 점에 유의해야 합니다.
정확한 IEEE 754 비트 표현 확인하기
컴퓨터 메모리에 실제로 저장된 float 값의 비트 패턴(IEEE 754 단정밀도 형식)을 확인하려면 BitConverter 클래스를 사용하는 것이 가장 정확합니다.
using System;
class Program {
static void Main() {
float n = 50.5f;
int bits = BitConverter.ToInt32(BitConverter.GetBytes(n), 0);
Console.WriteLine(Convert.ToString(bits, 2).PadLeft(32, '0'));
}
}
실행 결과
01000010010010100000000000000000
이 결과는 50.5f가 부호 비트 1개, 지수 비트 8개, 가수 비트 23개로 구성된 32비트 단정밀도 부동소수점 형식으로 저장되었음을 보여줍니다.