2012-11-18 8 views
2

나는 무인 항공기를 프로그래밍하는 데 AR Drone SDK를 사용하고 있습니다. 워드 프로세서에서, 말한다이 다음 번호 -0.8는 IEEE-754 포맷에 따라, 그 값 BF4CCCCD (16) 인 32 비트 워드로 메모리에 저장된다이진 부동 소수점 - 이진 변환

. 이 32 비트 워드는 을 32 비트 정수 값 -1085485875 (10)로 간주 할 수 있습니다. 따라서 보낼 명령은 AT * PCMD = xx, xx, -1085485875, xx, xx가됩니다.

어떻게 이진 변환의 10 진수 표현을 위해 -1085485875에 도착합니까? 그것은 나에게 이해가되지 않는다. http://kipirvine.com/asm/workbook/floating_tut.htm이 페이지 :이 페이지를 사용하여

decimal value = -0.8 

binary value of decimal (-0.8) = -.11001100110011001100110 

biased exponent (move above decimal over once to right) = 127 - 1 = 126 = 01111110 

sign, exponent, mantissa (mantissa: drop off the 1 to left of decimal point, pad to 23) = 1 01111110 10011001100110011001100 

10111111010011001100110011001100 = 3209481420 (10) BF4CCCCC (16). 

워드 프로세서가 -1085485875 (10)와

BF4CCCCD (16)

무엇 오전 말한다 : http://www.madirish.net/240이 페이지 http://cs.furman.edu/digitaldomain/more/ch6/dec_frac_to_bin.htm를이 내가 생각 해낸 것입니다 나는 여기에서 틀리게하고있다 ???

감사합니다.

편집 :

나는이 Node.js를 기능을 사용하는 경우 나, 노드/JS과 AR 드론 응용 프로그램을 쓰고 있어요 이후 :

var buffer = new Buffer(4); 
buffer.writeFloatBE(-0.8, 0); 
return -~parseInt(buffer.toString('hex'), 16) - 1; 

나는 설명서에 따라 올바른 결과를 얻을. 나는 그것을 장시간에 쓸 때 내가 잘못하고있는 것을 얻지 못한다. 무슨 일이 벌어지고 있는지 이해하고 싶습니다. 어떤 도움이라도 대단히 감사합니다.

감사합니다.

UPDATE :

그래서, 내가 먼저 바이너리의 비트 NOT 연산자를 적용 할 경우, 그 다음 정확한 숫자를 생성 (자바 스크립트 코드 위에서) 알아 냈어요. 내 질문은, 왜 이것이 적용될 필요가 있는가하는 것입니다. 이 작업을 한 후에는 첫 번째 비트가 0이 아닌 경우 음수인지 확인해야합니다. 이게 뭐야?

+0

가수를 반올림하는 대신 반올림하고 결과를 2의 보수로 해석해보십시오. – Bovinedragon

+0

@Bovinedragon 가명을 잘라낼 때 나는 이해하지 못한다. 내가 어디에서 이것을하고 있나? 결과를 2의 보수로 해석하는 것에 대한 정보를 좀 더 주시겠습니까? .8은 1100의 반복 바이너리 패턴이되므로 22 개 장소까지 반복하지만 십진수 왼쪽에서 1을 제거한 후 끝에 0을 더합니다. 그래도 나는 그것을 자르는거야? 방금 서명, 지수 및 가수를 함께 사용하면 최종 결과가 정확합니까? 지금까지이 숫자들이 어떻게 기억에 저장 되는가? –

+0

나는이 모든 것에서 그들이 -1085485875를 얻는 곳을 이해하지 못한다. –

답변

0

-0.8 = -0.110011001100110011001100 11001100110011001100110011001100110011 ... (공백은 비트 24와 25 사이입니다 - 비트 25는 반올림 비트입니다). 24 비트를 0.110011001100110011001101로 반올림합니다. 다음은 IEEE 단 정밀도 형식으로 보이는 방법은 다음과 같습니다 진수에 10111111010011001100110011001101, 또는 BF4CCCCD

sign biased exponent trailing 23-bits of mantissa 
\/  \/      \/ 
1  01111110   10011001100110011001101 

. 두 개의 정수로 보시면 -1085485875입니다.