-
[IEEE 754] 부동소수점과 바이어스 표현법C, C++ 2018. 12. 12. 09:37
컴퓨터에서 실수를 표현하기 위해 사용하는 방법
IEEE 754(32bit),부호부 1bit
지수부 8bit
가수부 나머지bit
-------------------------------------------------------------------------------------------------------------------------------------------------------
1. 먼저 표현하고자 하는 소수(실수) 를 2진수로 변환한 후 소수점 앞의 숫자가 2보다 작아지도록 소수점을 이동시키고
소수점 이동(부동소수점 : 부유하는 소수점 floating point)에 따른 2의 제곱승(-->지수부)을 곱해주어 아래와 같이 만든다
예) 1.001101 * 2^6 (<<-- 정규화라고도 한다.)
2. 지수부의 표현은 바이어스법에 의한다.
본래 8bit의 표현가능 숫자의 범위는 -127~ 128 이지만
부호부가 존재하지 않기 때문에 0000000 을 -127로, 11111111을 128로 정의하기로 약속함
예) 지수부의 숫자가 6인 경우 (2의6승)
6 을 이진수로 변환하는 것이 아닌 6+127 = 133을 2진수로 변환한 값을 지수부 8bit에 맞추어 넣어준다.
3. 가수부에는 소수점 이하의 수를 그대로 왼쪽부터 입력해준다.
--------------------------------------------------------------------------------------------------------------------------------------------------------
int main(){
double x=0.5, y=0.0, z=1.0, w=-1.0;
// 2진수로 변환하여 생각해볼 것 ...dobule은 8yte지만 printf는 4byte의 버퍼를 사용함
printf("x= %lx %lx\n", x); // %lx %lx 가 2번 들어가있는 이유는 부족한 바이트를 채워야 16진수로 표현이 가능하기때문에..
printf("y= %lx %lx\n", y);
printf("z= %lx %lx\n", z); // 16진수 출력..0000 ....6개.. 0001
printf("w= %lx %lx\n", w); //
x= 0 3fe00000
y= 0 0
z= 0 3ff00000
w= 0 bff00000
----------------------------------------------출력값이 위와 같이 나오는 이유에 대한 설명 -------------------------------------
1을2 진수로 바꾸면 1*20승이무로 지수부에는 0을 집어넣어주어야 함
0011 1111 1111 0000 0000 0000 0000 0000
16진수로 바꾸면
3 F F 0 0 0 0 0 이 된다…
부호부 지수부 가수부
지수부는 바이어스 표시법으로 0을 표시하기 때문에
011 1111 1111 로 표시됨
http://thrillfighter.tistory.com/349 참고
'C, C++' 카테고리의 다른 글
포인터 (0) 2018.12.12 함수의 선언과 사용 (2) 2018.12.12 C의 자료형의 표현[java와 비교] (0) 2018.12.12 [20181207] 수의 체계2+ C언어 개요 (0) 2018.12.07 20181206]C 툴 설치+ 수의 체계(비트 연산기본 설명) (0) 2018.12.06