2번째 문제는 소수점 아래 몇 번째 자리까지가 의미있는 숫자인가? 정도로 보면 될 듯 합니다.
이거는 저도 풀이가 확실치 않은데..
555555.555555는 2진수로 나타내면 10000111101000100011.10001110001 ....... 이고
정규화하면 1.000011110100010001110001110001*2^19 입니다.
127에 19를 더하면 146이고 이는 2진수로 10010010 입니다.
32비트로 float 형태로 나타내게 되면 0/1001001 0/0000111 10100010 00111001 (1비트 자리의 경우 하위 값이 0이 아니라 값이 있으면 하위 값은 버리되 1비트는 1이 되는 듯 싶습니다. 반올림 느낌이랄까요) 이 되며
가수부분은 0000111 10100010 0011 까지가 정수를 나타내기 위해 사용됐으며 1001만 소수부분으로 남게됩니다.
그래서 0.5625만 의미있게 되죠. 4자리 아닌가 싶습니다. 1번 질문 문제 처럼 포인터를 통해 실수 값을 정수로
나타내면 1225237049가 나오며 이 형태가 0/1001001 0/0000111 10100010 00111001입니다.
원리 확인을 위해 이렇게 해봤으나 원리를 알고 있다면 10000111101000100011.10001110001 에서
바로 10000111101000100011.1001을 해서 확인도 가능했겠죠?
근데 5.555555*10^5의 힌트가 궁금하긴하네요.. 뭔가 더 쉬운 방법이 있을거도 같습니다.
세번째 질문은 보통 float은 127로 바이어스되어 한자리 더 표기하기 위한 방법 쓰시는 것은 아시죠?
그러면서 정수부분의 1은 생략하구요.
말씀대로 9/16은 2진수로 0.1001이며 이를 정규화하면 1.001*2^-1이 되죠.
가수부는 1.001에서 정수부분1을 생략하여 소수부분 001만 표기하도록 합니다. 0010000~~~이 되겠죠
지수부는 127에서 1을 뺀 126이 저장되어 있는 것이지요. 2의-1승이니까요. 이것은 01111110 입니다.
0/0111111 0/0010000 00000000 00000000 으로 보시면 좀 더 이해가 될겁니다.