정보처리기사/소프트웨어 개발
데이터 입출력 구현 2
RangA
2023. 5. 3. 15:19
고정 소수점과 부동 소수점
01. 고정 소수점(정수)
1) 고정 소수점 수의 표현
- 고정 소수점
- 정수는 실수와 같이 소수점이 불규칙하지 않고 항상 고정되어 있다고 해서 붙여진 이름
- 정수는 실수의 부분 집합이며 실수로 표현이 되므로 1.0, 2345.0, -35.0 등으로 표현
- 정수는 고정 소수점, 실수는 부동 소수점이라고 함
- 3비트로 수를 표현하면 총 8개의 수를 표현할 수 있음
- 전원을 각 회선에 각각 On, Off, On을 넣어주면 1, 0, 1이 전달된 것이므로 이진수는 101, 십진수를 5를 전달한 것이 됨
이진수 | 십진수 |
---|---|
000 | 0 |
001 | 1 |
010 | 2 |
011 | 3 |
100 | 4 |
101 | 5 |
110 | 6 |
111 | 7 |
- 8가지이므로 0 ~ 7까지 표현할 수 있음
- 0과 자연수의 범위에서 음의 자연수(음의 정수)로 확대 표현하는 것이 활용도가 좋음
- 음수를 표현하기 위하여 부호화 절대치에서 1의 보수, 2의 보수 방법으로 발전
- 보수는 컴퓨터에서 기본적으로 사용하는 덧셈 연산을 이용하여 뺄셈을 수행하기 위해서 사용
- 현재에는 2의 보수 방법으로 음수를 표현
2) 부호화 절대치
- 3비트에서 상위 1비트는 무조건 부호로 봄
- 0이면 양수(+), 1이면 음수(-)
- -3 ~ +3까지 표현되며, +0, -0이 존재함
- 3비트이므로 -(22 - 1) ~ +22 - 1
- 따라서 n비트이면 -(2n-1 - 1) ~ +2n-1 - 1이 됨
이진수 | 부호 비트 | 나머지 비트 | 부호 | 십진수 | 부호화 절대치 |
---|---|---|---|---|---|
000 | 0 | 00 | + | 0 | +0 |
001 | 0 | 01 | + | 1 | +1 |
010 | 0 | 10 | + | 2 | +2 |
011 | 0 | 11 | + | 3 | +3 |
100 | 1 | 00 | - | 0 | -0 |
101 | 1 | 01 | - | 1 | -1 |
110 | 1 | 10 | - | 2 | -2 |
111 | 1 | 11 | - | 3 | -3 |
3) 1의 보수
- 3비트에서 상위 1비트는 무조건 부호로 봄
- 0이면 양수(+), 1이면 음수(-)
- 3비트이므로 -(22 - 1) ~ +22 - 1
- +3 다음에 -3이 되게 하여 수를 회전하도록 함
- 따라서 n비트이면 -(2n-1 - 1) ~ +2n-1 - 1이 됨
이진수 | 부호 비트 | 나머지 비트 | 부호 | 십진수 | 1의 보수 |
---|---|---|---|---|---|
000 | 0 | 00 | + | 0 | +0 |
001 | 0 | 01 | + | 1 | +1 |
010 | 0 | 10 | + | 2 | +2 |
011 | 0 | 11 | + | 3 | +3 |
100 | 1 | 00 | - | 0 | -3 |
101 | 1 | 01 | - | 1 | -2 |
110 | 1 | 10 | - | 2 | -1 |
111 | 1 | 11 | - | 3 | -0 |
4) 2의 보수
- 3비트에서 상위 1비트는 무조건 부호로 봄
- 0이면 양수(+), 1이면 음수(-)
- -4 ~ +3까지 표현되며, 0이 하나만 존재함
- 3비트이므로 -(22) ~ +22 - 1
- +3 다음에 -4가 되게 하여 수를 회전하도록 함
- 따라서 n비트이면 -(2n-1) ~ +2n-1 - 1이 됨
이진수 | 부호 비트 | 나머지 비트 | 부호 | 십진수 | 2의 보수 |
---|---|---|---|---|---|
000 | 0 | 00 | + | 0 | +0 |
001 | 0 | 01 | + | 1 | +1 |
010 | 0 | 10 | + | 2 | +2 |
011 | 0 | 11 | + | 3 | +3 |
100 | 1 | 00 | - | 0 | -4 |
101 | 1 | 01 | - | 1 | -3 |
110 | 1 | 10 | - | 2 | -2 |
111 | 1 | 11 | - | 3 | -1 |
5) 정수 표현 범위(8비트를 사용할 경우)
구분 | 부호화 절대치 | 1의 보수 | 2의 보수 |
---|---|---|---|
+75 | 0100 1011 | 0100 1011 | 0100 1011 |
-75 | 1100 1011 | 1011 0100 | 1011 0101 |
0의 표현 | +0 : 0000 0000 -0 : 1000 0000 0이 2가지 존재 |
+0 : 0000 0000 -0 : 1111 1111 0이 2가지 존재 |
+0 : 0000 0000 0이 1가지 존재 |
02. 부동 소수점(실수)
1) 부동 소수점 수의 표현
- 부동 소수점
- 실수형 상수는 12.34, 0.0003, -1.34와 같이 소수점을 중심으로 좌우에 숫자들이 불규칙해서 붙여진 이름
- 실수형 상수를 기억 장소인 실수형 변수에 기억시키려면 불규칙한 소수점을 일정하게 유지해야 하므로 정규화가 필요
- 실수 데이터의 표현과 연산에 사용
- 정규화(Normalization) 과정을 통하여 부호부, 지수부, 가수부로 구성
- 고정 소수점보다 복잡하고 실행 시간이 많이 걸리며, 아주 큰 수나 작은 수의 표현이 가능하고 정밀도가 제한적
- 부호 비트의 양수는 0, 음수는 1로 표현
2) 부동 소수점의 정규화
- -98.45인 경우에는 부호부는 음수(-)이므로 1, 가수부는 -0.9845에서 9845, 지수부는 2승이므로 2를 기억시키면 됨
실수형 상수 | 정규화 | 기억시키는 값 | 부호 | 지수(8비트) | 가수(32비트) 소수점 제외 |
---|---|---|---|---|---|
0.234 | 0.234 x 100 | +(0), 234, 0 | 0 | 00000000 | 11101010000000000000000 |
-98.5 | -0.985 x 102 | -(1), 985, 2 | 1 | 00000010 | 985의 이진수 표현 |
3.125 | 0.3125 x 101 | +(0), 3125, 1 | 0 | 00000101 | 3125의 이진수 표현 |
-255.75 | 0.25575 x 103 | -(1), 25575, 3 | 1 | 00000011 | 25575의 이진수 표현 |
47.5 | 0.475 x 102 | +(0), 475, 2 | 0 | 00000010 | 475의 이진수 표현 |
3) 부동 소수점 연산
1. 부동 소수점의 덧셈과 뺄셈
- 0인지 여부를 조사
- 값이 0인 부동 소수점은 정규화할 수 없음
- 0이 포함된 연산이라면 0이 아닌 피연산자가 연산 결과가 됨
- 큰 지수에 맞춰 두 수의 지수가 같도록 조정
- 두 수의 가수를 더하거나 뺌
- 정규화 수행
2. 부동 소수점의 곱셈
- 0인지 여부를 조사
- 0이 포함된 연산이라면 곱셈 연산 결과는 0이 됨
- 지수를 더함
- 가수를 곱함
- 정규화 수행
3. 부동 소수점의 나눗셈
- 0인지 여부를 조사
- 제수가 0이면 오류, 피제수가 0이면 나눗셈 연산 결과는 0이 됨
- 부호를 결정
- 피제수가 제수보다 작게 피제수의 위치를 조절
- 피제수가 크면, 가수부가 소수점 이하가 나오지 않음
- 지수를 뺌
- 가수를 나눗셈함
- 정규화 수행
03. 자료형 변환 시 확장과 축소
1) 확장(Widening)
- 정수형을 실수형으로 변환 시 정보의 손실이 없음
2) 축소(Narrowing)
- 실수형을 정수형으로 변환 시 정보의 손실이 있음
04. 기억 장치의 용량
1) 저장 용량 단위
단위(명칭) | 설명 |
---|---|
1KB(Kilo Byte) | 210byte = 1024byte ≒ 1000B |
1MB(Mega Byte) | 210KB = 210 x 210 = 220byte ≒ 1000KB |
1GB(Giga Byte) | 210MB = 210 x 220 = 230byte ≒ 1000MB |
1TB(Tera Byte) | 210GB = 210 x 230 = 240byte ≒ 1000GB |
1PB(Peta Byte) | 210TB = 210 x 240 = 250byte ≒ 1000TB |
1EB(Exa Byte) | 210PB = 210 x 250 = 260byte ≒ 1000PB |
1ZB(Zetta Byte) | 210EB = 210 x 260 = 270byte ≒ 1000EB |
1YB(Yotta Byte) | 210ZB = 210 x 270 = 280byte ≒ 1000ZB |
2) 속도 및 길이를 나타내는 단위
단위(명칭) | 설명 |
---|---|
10-1(deci) | 1d = 1/10 = 0.1 |
10-2(centi) | 1c = 1/100 = 0.01 |
10-3(milli) | 1m = 1/1,000 = 0.001 |
10-6(micro) | 1μ = 1/1,000,000 = 0.000001 |
10-9(nano) | 1n = 1/1,000,000,000 = 0.000000001 |
10-12(pico) | 1p = 1/1,000,000,000,000 = 0.000000000001 |
10-15(femto) | 1f = 1/1,000,000,000,000,000 |
10-18(atto) | 1a = 1/1,000,000,000,000,000,000 |
10-21(zepto) | 1z = 1/1,000,000,000,000,000,000,000 |
10-24(yocto) | 1y = 1/1,000,000,000,000,000,000,000,000 |