2010-02-09 7 views
5

어떻게 double 값을 이진 값으로 변환 할 수 있습니까?이중 값을 이진 값으로 변환

난 내가로 변환하려고 두 번에 그것을 유지하고 있어요 바이너리 format..so이를 변환 할 125252525235558554452221545332224587265 다음과 같은 몇 가지 값이 바이너리 (1 & 0의) ... 나는 C# .NET을

을 사용하고 있습니다
+0

질문에 좀 더 구체적이어야합니다. 프로그래밍 언어, CPU, OS 등의 세부 사항과 실제로 얻으려는 내용에 대해 좀 더 자세한 답변을 얻을 수 있습니다. http://catb.org/~esr/faqs/smart-questions.html –

답변

0

당신이 직접하고 싶다는 뜻이라면 프로그래밍 문제는 아닙니다.

컴퓨터가 할 수있게하려면 가장 쉬운 방법은 부동 소수점 입력 루틴을 사용하고 결과를 16 진수 형식으로 표시하는 것입니다. C++에서 : 음

double f = atof ("5.5555555555556E18"); 
unsigned char *b = (unsigned char *) &f; 
for (int j = 0; j < 8; ++j) 
    printf (" %02x", b [j]); 
+0

8은 매우 구체적인 데이터 유형을 언급 할 수 있습니다. 나는 IEEE754 64 비트가 C 표준에 위임되어 있다고 생각하지 않는다. – paxdiablo

11

, 당신은 당신이에 관심이 이진 값의 종류의 플랫폼 또는 지정하지 않은,하지만 .NET에서 당신은 값을 구성하는 IEEE 754 비트에서 얻을 수 있습니다 BitConverter.DoubleToInt64Bits있다 아주 쉽게.

자바에서는 같은 것을하는 Double.doubleToLongBits이 있습니다.

값이 "125252525235558554452221545332224587265"이면 두 배가 정확하게 처음부터 정확하게 저장할 수있는 것보다 많은 정보가 있음에 유의하십시오.

0

이중 값은 이미 이진 값입니다. 당신이 가지고 있기를 바라는 표현의 문제 일뿐입니다. 프로그래밍 언어에서는 double이라고 할 때 사용하는 언어가 한 방향으로 해석합니다. 동일한 메모리 덩어리를 int라고 부르는 경우, 동일한 숫자가 아닙니다.

정말 원하는대로 달려 있습니다 ... 디스크 나 네트워크에 써야한다면 BigEndian/LittleEndian에 대해 생각해 봐야합니다. C에서

+0

나는 아래 값을 가지고있다 125252525235558554452221545332224587265 이것을 바이너리 포맷으로 변환하고 싶다. 그래서 나는 그것을 두 개로 유지하고 바이너리 (1 & 0 's)로 변환하려한다. 나는 C# .net을 사용하고있다. – raj

+0

BTW, 이 숫자는 127 비트이므로 이중으로 근사 할 수 있습니다. –

6

, 당신은 인스턴스에 대한 union 구조의 고전적인 사용이다 이런 식으로, 그것을 할 수 있습니다 : 당신이 main()이 막대기 그것을 실행하는 경우

int i; 
union { 
double x; 
unsigned char byte[sizeof (double)]; 
} converter; 

converter.x = 5.5555555555556e18; 

for(i = 0; i < sizeof converter.byte; i++) 
    printf("%02x", converter.byte[i]); 

를,이 같은 뭔가를 인쇄 할 수 있습니다 :

~/src> gcc -o floatbits floatbits.c 
~/src> ./floatbits 
ba b5 f6 15 53 46 d3 43 

참고이 그 불구하고, 물론, 플랫폼에 따라 그 endianness입니다. 위는 Sempron CPU에서 실행되는 Linux 시스템에서 가져온 것입니다. 즉 리틀 엔디안입니다.

-1

큰 숫자의 경우 (이중으로 정확하게 표시 할 수없는 사용자) 필요한 정보를 보유하기 위해 특수 클래스를 사용해야합니다.

C#을 진수 클래스를 제공

진수 값 유형이 포지티브에서 네거티브 79,228,162,514,264,337,593,543,950,335 79,228,162,514,264,337,593,543,950,335 범위 진수를 나타낸다. 10 진수 값 형식은 많은 중요한 정수 및 소수 자릿수 및 반올림 오류가 필요하지 않은 재무 계산에 적합합니다. Decimal 형식은 반올림의 필요성을 제거하지 않습니다. 오히려 반올림으로 인한 오류를 최소화합니다. 예를 들어, 다음 코드는 결과가 0.99999999999999999999999999가 아닌 1을 생성합니다.

이보다 더 큰 정밀도가 필요하면 자신 만의 고유 한 클래스를 만들어야합니다.여기에는 int에 대한 것이 하나 있습니다 : http://sourceforge.net/projects/cpp-bigint/ C++ 용 인 것 같습니다.

관련 문제