1. char
- char 자료형을 소개한다.
- 크기가 1byte이다. 즉, 8bit를 의미한다.
- 1bit 란 진공관이나 트랜지스터를 전구로 표현한다면 전구한개에 해당한다.
- 즉, 8bit 란 전구 8개에 해당한다.
- 전구가 꺼져있으면 0
- 전구가 켜져있으면 1 을 의미한다.
00000000 : 0
00000001 : 1
00000010 : 2
00000011 : 3
00000100 : 4
...
01111111 : 127
이런식으로 되며,
맨 앞의 전구는 부호를 의미하는데,
꺼져있으면 + 를
켜져있으면 - 를 의미한다.
11111111 : -1
11111110 : -2
11111101 : -3
11111100 : -4
...
10000000 : -128
결론) char 형은 1byte 즉, 8bit 이다. -128 ~ 127 까지의 숫자를 표현할 수 있다.
2. unsigned char
- char는 사실 signed char 인데, signed 는 생략가능하기 때문에 생략하고 쓴것이다.
- unsigned char 는 첫번째 부호비트를 사용하지 않는다.
- 그렇기 때문에 0 ~ 255 의 숫자를 표현 할 수 있다.
00000000 : 0
00000001 : 1
00000010 : 2
00000011 : 3
...
01111111 : 127
10000000 : 128
10000001 : 129
10000010 : 130
...
11111111 : 255
3. int
- signed int 에서 signed 를 생략한것이다.
- 4byte 즉, 32bit 자료형이다.
- char 과 마찬가지로 첫번째 비트는 부호비트이고 이 부호비트가 0이면 양수, 1이면 음수를 의미한다.
- -2,147,483,648 ~ +2,147,483,647 (-약21억 ~ +약21억) 까지 표현이 가능하다.
4. unsigned int
- 첫번째 부호비트를 사용하지 않는다.
- 표현 가능한 숫자는 0 ~ 4,294,967,295 (0 ~ 약42억)
- int 는 생략 가능하다.
5. 그외
- 그외에도 short, unsigned short, long, unsigned long, long long, unsigned long long 등이 있다.
- 다음의 표로 대신함.
6. float 와 double
- 소수점을 포함한 실수를 표현하기 위해서는 float (4byte) 나 double (8byte) 을 쓰면된다.
- float 나 double 은 unsigned 가 없다.
- 데이터 표현 방식은 IEEE747표준을 따른다.
sign : 부호비트
Exponent : 지수
Mantissa : 가수
※ 예시) - 설명이 복잡 하므로 다음의 예시로 대체한다.
-118.625 (십진법) 을 IEEE 754 (32비트 단 정밀도)로 표현 한다고 했을 때.
- 음수이므로, 부호부는 1이 된다.
- 그 다음, 절댓값을 이진법으로 나타내면 1110110.101이 된다. (이진기수법을 참조)
- 소수점을 왼쪽으로 이동시켜, 왼쪽에는 1만 남게 만든다. 예를 들면 1110110.101=1.110110101×2⁶ 과 같다. 이것을 정규화된 부동소수점 수라고 한다.
- 가수부는 소수점의 오른쪽 부분으로, 부족한 비트 수 부분만큼 0으로 채워 23비트로 만든다. 결과는 11011010100000000000000이 된다. (맨앞의 1. 은 항상 1. 이기 때문에 표시하지 않음)
- 지수는 6이므로, Bias를 더해야 한다. 32비트 IEEE 754 형식에서는 Bias는 127이므로 6+127 = 133이 된다. 이진법으로 변환하면 10000101이 된다.
이 결과를 정리해서 표시하면 다음과 같다.
※ Bias 가 127 이고 이것을 더하는 이유)
지수부를 8비트로 표현한다면 모두 256가지 수를 나타낼 수 있는데 이것을 반으로 나누어 음수 127개와 0, 양수 128개를 차례대로 대응시킨다. 따라서, 비트열 00000000은 지수 -127을 나타내고, 01111111은 지수 0, 11111111은 지수 128을 나타낸다.
1.6×2E-2 를 이 방식으로 표현하면 '부호 +, 가수 60000, 지수 -002'가 된다.
※ 참고)
2.0×10E-2 = 0.02 (10진수 2번 자리수 내리기)
2.0×10E+2 = 200 (10진수 2번 자리수 올리기)
1110110.101 = 1.110110101×2⁶ = 1.110110101×2E6 (2진수 6번 자리수 올리기)
※ 주의)
float 나 double 은 모든 수의 실수를 표현 할 수 없다.
따라서 근사값(가장 가까운 수)을 구한다고 생각하면 된다.
'C언어(2020년)' 카테고리의 다른 글
6. scanf_s() 함수 (0) | 2020.11.02 |
---|---|
5. printf()함수 (0) | 2020.11.02 |
4. Hello World (0) | 2020.11.02 |
2. 최초의 컴퓨터 (0) | 2020.11.01 |
1. 컴퓨터의 구조 (0) | 2020.11.01 |