부동 소수점 숫자로 이진수를 표현해야합니다. 이 16 진수를 이진수로 변환 할 때 FFFF로 16 진수를 사용하면 해당 이진수가 1111111111111111이됩니다. 내 인텔 프로세서에서 사용하는 저장소 형식은 32 비트는 부호 용으로 1 비트, 지수, 그리고 가수를위한 23 비트. 나는 약간의 아이디어를 가지고 있지만 아주 혼란 스럽다. 누구나이 이진수에 해당하는 부동 소수점 값을 알려줄 수 있습니까?이진수가 1111111111111111이고 Intel 프로세서에서 사용하는 저장 형식이 32 비트 인 경우 float 값은 어떻게됩니까?
답변
32 사람
간단하게 그것을 밖으로 시도 :#include <stdio.h>
int main() {
union {
unsigned i;
float f;
} u;
u.i = 0xffffffff;
printf("%f\n", u.f);
return 0;
}
인쇄 -nan
. 이 실험에서는 질문 상태로 0xffffffff
을 0xffff
이 아니라고 실제로 가정합니다.
http://en.wikipedia.org/wiki/Single_precision을 보면 지수 이 0이 아닌 유효 숫자와 함께 NaN으로 처리됩니다.
16 것들 귀하의 질문에 쓰기로 0xFFFF
만, 다음 코드는 0.000000
를 인쇄하지만,이 %f
%g
에 당신이 9.18341e-41
을 얻을 변경됩니다 후 당신이 정말로 있다면
. 이는 정수와 부동 소수점이 모두 동일한 endianess를 사용하기 때문입니다. 즉 비트 패턴 0x0000ffff
에 해당하는 float에 대해 이야기하고 있습니다.
여기서 0 기호 (예 : 양수), 0 지수 및 0이 아닌 유효 숫자를 볼 수 있습니다. 동일한 위키 피 디아 문서에 따르면, 이것은 subnormal number을 나타냅니다. 그래서 이것은 실제로 0xffff ∙ 2입니다. -149 = 65535 ∙ 2 -149입니다. IEEE-754 32 비트 부동 소수점, 0xFFFFFFFF
(그래서 32 사람) 가정
:
첫 번째는 표시이다, 그래서 부정적인 부동입니다. 그러면 지수가 나오는데, 최대 값이므로 "특별"지수입니다.
유효 숫자가 0이 아니므로 결과는 NaN
입니다.
출처 : Wikipedia.
방금 16 다음 사람, 원하는 경우
: 나머지 비트를 가정분명히 이것은 MvG에 의해 입증 된 경우가 아닙니다.
나머지 비트가 0이라고 가정하면 입력은 0x0000FFFF
입니다. 첫 번째 비트는 부호이며 0입니다. 그래서 우리는 긍정적 인 유동성을 가지고 있습니다.
그러면 지수에 8 비트가 있습니다.그것들은 모두 0이기 때문에, 우리는 (부분에 따라) 0 또는 비정상적인 숫자를 가질 것입니다.
분수가 모두 0이 아니므로이 부동 소수점은 비정규 숫자입니다.
이 시점에서 9 비트를 검사 했으므로 여전히 7 개의 추가 0이 있습니다.
분수는 7 개의 0으로 구성되며 그 뒤에 16 개의 숫자가옵니다. 따라서 유효 숫자는 (이진수로) 0.00000001111111111111111
입니다. 이 값에 2e-126
을 곱하면 답을 얻을 수 있습니다.
결과는 분명히 9.18341e-41
입니다.
나는 그것이 단지 NaN이라고 믿습니다. – Mysticial
'FFFF '는 32 비트 (4 바이트)가 아닌 2 바이트 (16 비트)입니다. 당신은'FFFFFFFF' (8x F)를 가졌거나 다른 것을 혼합 시켰습니다. – delnan
왜 너는 이걸 너 스스로 시도하지 않는거야? – valdo