zyeon's 작심삼일 코딩 공부
자료형 본문
프로그래밍을 할 때, 저장할 데이터의 종류에 따라 다른 자료형을 사용한다.
자료형 | 바이트수 | 범위 | |
정수형 | short | 2 | -32,768 ~ 32,767 |
int | 4 | -2,147,483,648 ~ 2,147,483,647 | |
long | 4 | -2,147,483,648 ~ 2,147,483,647 | |
long long | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
|
문자형 | char | 1 | -128 ~ 127 |
논리형 | bool | 1 | false, true (0 ~ 1) |
실수형 | float | 4 | 1.2E-38 ~ 3.4E38 |
double | 8 | 2.2E-308 ~ 1.8E308 | |
long double | 8 | 2.2E-308 ~ 1.8E308 |
1바이트 = 8비트 이고, 1비트에는 0또는 1의 값을 저장할 수 있다. 따라서 1바이트에는 2^8가지의 경우의 수를 저장할 수 있는 것이다.
보통 자료형에 signed가 생략되어 있고 +, - 와 같은 부호를 붙인 데이터를 저장할 수 있다. unsigned를 붙이면 양수만 사용한다는 뜻이다.
unsigned char은 0 ~ 255 의 범위 표현이 가능한 것이다.
signed 최상단 비트를 MSB(Most Significant Bit)라고 하며, 0일 때 양수, 1일 때 음수를 표현한다.
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
▲MSB
signed char c = 2; 일 때
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 |
▲MSB
signed char c = -2; 일 때
-2는 00000010⑵에대한 2의 보수를 사용해 값을 저장했다.
보수를 구하는 법은, 대응되는 양수의 비트들을 반전 후 1을 더하면 된다.
보수를 사용하는 이유는 음수의 연산 과정의 문제 때문이다.
자료형에 따라 데이터가 어떻게 저장되는지 왜 알아야할까?
범위를 넘어간 숫자를 어떻게 처리하는지 알 수 있다. 흔히 말하는 오버플로우와 언더플로우의 원리를 알 수 있다.
실수형은 정수형과 표현 방식이 다르다. 실수형은 부동소수점 방식을 사용한다.
부동소수점 방식은 소수점의 위치가 떠서 움직인다는 뜻으로, 소수점의 위치를 움직여 한정된 비트로 아주 큰 정수와 아주 작은 소수의 표현을 가능하게 해준다. 고정소수점 방식에 비해 큰 범위의 값을 표현할 수 있다는 장점이 있는 것이다.
a * 10^b (1≤ a ≤10)
과학적 표기법에 따라 실수를 표기할 때, a를 가수, b를 지수라고 한다. 또한 a는 가수부분으로 실수의 정밀도를 나타내고, 10^b는 지수부분으로 실수의 표현 범위를 나타낸다.
부호 비트: 1비트
지수 부분: 8비트
가수 부분: 23비트
이와 같이 정해진 수의 비트 할당을 해주며, 이진수로 딱 떨어지지 않는 경우도 있기에 정확한 수를 표현하지 못 할 때에는 근사치를 나타낸다. 이를 고려하고 프로그래밍의 유의해야 한다.
double은 float의 두 배 정밀도를 가지고 있으며, 이는 double이 float에 비해 소수점 자리 수의 두 배 만큼 오차 없이 표현할 수 있다는 말이다.
'c++ 정리' 카테고리의 다른 글
포인터와 배열 (0) | 2024.06.20 |
---|---|
포인터 (0) | 2024.06.17 |
지역변수, 전역변수, 정적변수, 외부변수 (2) | 2024.06.14 |
비트 연산자, 플래그 (1) | 2024.06.05 |
C++을 공부하는 이유, 객체 지향 프로그래밍 (1) | 2024.06.04 |