목차
- 자료형의 표현
- 정수형 자료형
- 실수형 자료형
- 부동 소수점 IEEE-754
- 문제 풀어보기.
1. 자료형의 표현
Byte
- 1 byte == 8bit
- bit는 데이터 처리에서 가장 작은 단위, 0 또는 1중 하나의 상태를 나타냅니다.
- 1byte는 2^8만큼의 상태값을 표현 가능합니다.
음수 표현

- 컴퓨터는 가장 왼쪽에 존재하는 비트가 1인 경우 음수, 0인경우 양수로 인식합니다.
- 가장 왼쪽에 존재하는 비트를 MSB(Most Significant Bit)로 부릅니다. 직역하면 가장 중요한 비트라는 뜻이고 음수 부호 비트를 나타냅니다.
뺄셈의 계산
- 컴퓨터는 뺄셈을 음수의 덧셈으로 표현합니다.
- 예시를 들자면
10 + (-10) = 0 이런식으로 뺄셈을 표현합니다.
- 여기서
-10 을 가리키는 이진수에 대해서 예시를 들어보자면. 1byte 기준으로 10을 가리키는 이진수는 0000 1010이므로 0000 1010과 더해서 0이 나오게하는 이진수가 -10 이라고 할 수 있습니다.
-10은 0000 | 1010에 1111 | 0110을 더해주면. 1 | 0000 | 0000 이므로 이진수의 덧셈 상에서 0을 나타낼 수 있습니다.
2의 보수.
- 어떤 이진수에 대응하는 음수값을 쉽게 찾아내기 위한 방법입니다.
- 이진수의 모든 자리숫자를 반전시키고 여기에 1을 더하면 2의 보수를 얻을 수 있습니다.
- 이 값은 어떤 이진수의 음수값과 동일합니다.
// 이진수 127
01111111
+10000001 // 숫자를 반전시키면 1000000이지만 +1 수행.
---------
100000000 => 더해서 0이됨.
signed, unsigned
- signed와 unsigned는 직역하면 부호있는, 부호없는 이라는 뜻입니다.
- 여기서 지칭하는 부호는 MSB입니다. 즉 음수를 표현하는, 음수를 표현하지 않는 자료형이라는 뜻입니다.
- 기본적으로 자료형은 signed 자료형입니다.
- unsigned 자료형은 음수 표현이 없는 대신 그 범위만큼 양수 표현 범위가 늘어납니다.
2. 정수형 자료형
표현 단위
-
표현의 최소 단위는 1byte(8bit) 입니다
-
char(1), short(2), int(4), long(4), long long(8)
값의 표현 범위
- signed 자료형인 경우.
−2byte∗8−1 ~ 2byte∗8−1−1
- unsigned 자료형인 경우
0 ~ 2byte∗8−1
3. 실수형 자료형
표현 단위
- 표현의 최소 단위는 1byte(8bit)입니다.
- float(4), double(8)
상수 표현
- c++에서는 실수를 상수로 적을 경우 소수점 뒤에 f를 붙이면 float 자료형으로, f를 붙이지 않으면 double 자료형으로 간주합니다.
형 변환의 이해
정수와 실수의 혼합 연산이 일어나는 경우
하나의 자료형으로 형변환을 해주어야 합니다.
그러한 이유는 정수형과 실수형의 표현 방식이 다르기 때문입니다.
각 자료형에 대한 컴퓨터의 표현 방식이 다르기 때문에 혼합 연산의 경우 어떤 자료형으로 표현할지를 프로그래머가 정의해주어야 합니다.
실수형의 경우는 부동소수점 방식으로 표현하고, 정수형의 경우는 일반 비트로 표현합니다.
4. 부동 소수점 IEEE-754
- 부호비트 : 맨 앞의 비트가 1이면 음수, 0이면 양수
- 지수부 : 부호가 없는 정수 부분의 8비트를 차지
- 가수부 : 정규화된 이진수 표현, 23비트를 차지.
실수부의 2진수 변환
- 절대값이 1보다 작은 10진수 소수에 2를 곱합니다.
- 2를 곱한 결과는 1을 넘거나 넘지 않을 것입니다.
- 만약 1을 넘었을 경우 결과에서 1을 떼어내고, 아니면 0으로 처리하며 다음 계산을 이어나갑니다.
- 소수점 이하에 아무 숫자도 남지 않을 때까지 곱셈을 반복합니다.
- 이 과정에서 만들어진 결과의 정수 부분(0 또는1)들을 순서대로 쓰면 해당 소수의 2진수 변환 값이 나옵니다.
가수부 정규화
- 정규화는 소수점을 왼쪽으로 이동시켜, 왼쪽에는 1만 남게 만드는 방법을 정규화라고 합니다.
- 정규화를 수행하는 이유는 한정된 공간에 더 많은 수를 표현하기 위해서 사용하는 방법입니다.
지수부 계산
- IEEE-754에서는 양수와 음수를 표현하기 위해 bias라는 개념을 도입합니다.
- 여기서 bias는 실제수(음수는 -127, 양수는 128)에 127을 더한 수라는 개념입니다.
-----------------------------------------------
일반 실수의 부동소수점 계산 예시.
양수 8.25와 무한 소수점 계산 예시.
양수 8.25 계산
- 양수이므로 부호 비트가 0.
- 실수부의 2진수 변환
0.25 [0]
0.25 * 2 = 0.5 [0]
0.5 * 2 = 1.0 [1] => 뒷자리가 없으므로 계산 종료.
-
가수부 계산 (정규화)
8 => 10002, 0.25 => 0.012
8.25 => 1000.012
1000.012 정규화를 수행하면
0을 오른쪽으로 옮겨주고 지수를 추가
1000.012 => 1.0000123
1.0000123
실제 표현되는 이진수는 0000 | 0100 | 0000 | 0000 | 0000 | 000|
-
지수부 계산
- 지수가 3이므로 =>
0111 | 1111(bias 127) + 0000 | 0101(3) => 1000 | 0010 입니다.
-
최종 계산
- 부호 비트
0
- 지수부
1000 | 0010
- 가수부 `
0000 | 0100 | 0000 | 0000 | 0000 | 000|
- 최종 이진수 표현
0|10000010|00001000000000000000000
양수 8.6 계산
- 양수이므로 부호 비트가 0
- 실수부의 2진수 변환
0.6 * 2 = 1.2 [1]
0.2 * 2 = 0.4 [0]
0.4 * 2 = 0.8 [0]
0.8 *2 = 1.6 [ 1]
0.6 * 2 = 1.2 [1]
0.2 * 2 = 0.4 [0]
0.4 * 2 = 0.8 [0]
0.8 *2 = 1.6 [ 1]
실수부가 1001로 반복되는 것을 확인할 수 있음.
- 가수부 계산 (정규화)
8 => 10002 / 0.6 => 0.10011001...2
1000.10011001.....2
1.00010011001....23
실제 표현되는 이진수 0001∣0011∣0011∣0011∣0011∣010
-
지수부 계산
- 지수가 3이므로 =>
0111 | 1111(bias 127) + 0000 | 0101(3) => 1000 | 0010 입니다.
-
최종 계산
- 부호비트
0
- 지수부
1000 | 0010
- 가수부
000|1001|1001|1001|1001|1010
- 최종 표현
01000001000010011001100110011010
IEEE 754 무한소수의 반올림.
이전에 계산한 8.6은 실수부가 무한소수입니다.
가수부는 분명 1001 1001으로 반복되니까 000|1001|1001|1001|1001|1001| 이렇게 끝나야 할 것 같은데 실제 가수부는 000|1001|1001|1001|1001|1010 이렇게 끝났습니다.
IEEE-754는 32bit 단정밀도 표현방식이므로 표현할 수 있는 실수에는 제한이 있습니다.
무한소수의 경우 실수부가 23bit 표현방식을 넘으므로 이런경우 IEEE-754는 일반적으로 짝수 반올림규칙을 사용합니다.
-----------------------------------------------
짝수 반올림(round to nearest, ties to even)
반올림하려는 수의 소수부분이 정확히 0.5일 경우 소수부분의 앞 자리 숫자가 짝수인 경우 가장 가까운 작은 정수로 반올림됩니다.
- 4.5를 반올림하면 4가 됩니다.
- 5.5를 반올림하면 6이 됩니다.
8.6의 가수부 표현은?
- 8.6의 가수부는
000|1001|1001|1001|1001|1001 로 보여집니다.
- 이 때 뒤에도 무한소수가 반복된다고 가정하면
000|1001|1001|1001|1001|1001|1001.... 이렇게 표현되게 됩니다.
- 마지막 1뒤에 오는 1은 마지막 1의 1/2 = 0.5와 같습니다.
- 그리고 1001이 반복되므로 마지막 1뒤에 오는 숫자들은 마지막 1의 0.5배보다 큽니다.
- 그러므로 반올림이 수행되어서
000|1001|1001|1001|1001|1001 + 000|0000|0000|0000|0000|0001 => 000|1001|1001|1001|1001|1010이 되게 됩니다.
IEEE-754 참고.
5. 문제 풀어보기.
문제 1.
정수형 자료형의 표현범위를 적어주세요.
문제 2.
MSB, unsigned, signed에 대해서 설명해주세요.
문제 3.
형변환의 필요성에 대해서 설명해주세요.
문제 4.
부동 소수점 IEEE-754의 부호비트, 지수부, 가수부에 대해서 설명해주세요.
문제 5.
2.2를 IEEE-754 부동소수점 방식으로 표현해주세요.