* 제가 보기 편하기 위해 작성하는 메모이므로, 누락된 내용이 있을 수 있습니다.
누락된 내용은 제가 이미 숙지하였기 때문이거나 다른 이유로 누락될 수 있습니다.
* 데이터 처리
- 데이터는 사실 기본형과 복합형이 있습니다.
1. 기본형 데이터 : 정수형과 부동소수점형을 의미합니다.
2. 복합형 데이터 : char, string, 배열 등등 기본형 데이터를 베이스로 한 데이터 형태입니다.
* 정수형 데이터
정수형 데이터는 운영체제의 처리 기준을 따라 다른 크기를 갖습니다.
32bit 운영체제에서 int는 일반적으로 4byte의 크기를 갖습니다.
재미있게도, 64bit 운영체제가 나온 현재도 int는 대부분 4byte로 처리합니다.
왜냐하면, int 크기가 수정되면 이미 개발된 수많은 프로그램들을 수정해야하기 때문입니다.
다음은 정수형 데이터의 크기입니다.
1. short : 2byte 이상
2. int : short 이상3. long : 최소 4byte, 최소 int 이상4. long long : 최소 8byte, 최소 long 이상
일반적인 크기는 short = 2byte, int = 4byte를 채택하고 있습니다.
- char
char : 아스키코드로 나타내는 1byte짜리 정수형 데이터입니다.
ASCII - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
예를 들어, '0'은 실제로 정수 48의 값을 갖습니다.
char zero = '0';
printf("%d", zero); //48
그런데.. 아스키 코드 표에는 한글이 없습니다. 한글을 표현하려면 어떻게 할까요?
C++에는 wide char type, 즉 wchar_t라는 자료형이 있습니다.
#include <iostream>
#include <locale.h>
int main()
{
wchar_t ch = L'ㄱ';
setlocale(LC_ALL, "KOREAN");
wprintf(L"%c\n", ch);
return 0;
}
wchar_t는 문자열, 혹은 문자 앞에 L을 붙여서 표기합니다.
- bool
bool : 0이 아니면 모두 true 취급하는 정수형 데이터입니다.
bool a = -100; //true
bool b = 0; //false
아래 내용은 제가 실험해 봤는데 참고삼아 보시면 재밌습니다.
#include <iostream>
#include <locale.h>
int main()
{
bool a = 0.1f;
int i = 0.1f;
printf("%d\n", i); //0
if(a)
printf("YES"); //YES
return 0;
}
#include <iostream>
#include <locale.h>
int main()
{
int i = 0.1f;
bool a = i;
printf("%d\n", i); //0
if(a)
printf("YES"); //미표시
return 0;
}
#include <iostream>
#include <locale.h>
int main()
{
bool a = 0.f
int i = -0.1f;
printf("%d\n", i); //0
if(a)
printf("YES"); //YES
return 0;
}
* 부동소수점 데이터
1. float : 최소 4byte, 유효숫자 6자리
2. double : 최소 6byte, float 이상, 유효숫자 15자리
3. long double : 최소 double 이상, 유효숫자 18자리
일반적으로, float = 4byte, double = 8byte, long double은 8byte입니다.
long double은 특히 환경마다 크기가 다르니 주의합니다.
- 부동 소수점 오차 문제
부동 소수점은 위와 같이 표현되기 때문에, 계산식을 따라가보면 정확한 값이 안나옵니다.
#include <iostream>
int main()
{
float f = 2.09f;
int i = f * 100;
printf("%d", i); //208
return 0;
}
위 코드가 대표적인 예시인데, 부동 소수점은 실수를 아래와 같은 방식으로 저장합니다.
a*2^b
따라서, 우리가 2.09f는 사실, 2.09가 아닌 2.089999..에 가까운 수입니다.
* 형변환
- 암시적 형변환
float f = 2.09f;
int i = f;
컴파일러가 암시적으로 float을 int로 변환해 줍니다.
- 명시적 형변환
float f = 2.09f;
int i = (int)f;
(typename)변수;
typename(변수);
위와 같은 형태를 C-Style 형 변환이라고 합니다.
C++에서 지원하는 4가지 변환에 대해서는 다음에 알아보도록 합니다.
'공부 및 정리 > C++' 카테고리의 다른 글
C++의 기초 - 6 (0) | 2022.12.12 |
---|---|
C++의 기초 - 5 (0) | 2022.12.12 |
C++의 기초 - 4 (0) | 2022.11.30 |
C++의 기초 - 3 (0) | 2022.07.12 |
C++의 기초 - 1 (0) | 2022.06.12 |