우선 자료형을 설명하기 전에 필요한 문법과 개념들을 설명한다.
특별한 의미가 있는 미리 정의된 예약된 식별자
키워드는 컴파일러가 사용하기 위해 미리 예약해둔 단어이기 때문에 그 용도에 맞게 사용해야 한다. 용도는 나중에 천천히 알게 된다.
코드를 짤 때는 키워드와 식별자의 조합으로 이루어진다. 미리 예약된 단어인 키워드와 우리가 보기 편하게 이름을 정한다는 식별자를 통해서 문장을 구성하게 된다.
| short | int | long | float | double |
| char | unsigned | signed | for | while |
| continue | break | if | else | class |
개체나 변수, 클래스, 구조체, 열거형식, 함수 등에 쓰이는 문자 시퀸스
다시 말해 우리가 프로그래밍할 때 무언가에 붙여주는 이름
;
문장의 끝을 알려주는 기호
컴파일러가 무시하지만 프로그래머에게 유용한 텍스트
프로그램에 반영되지 않는, 코드의 중간 중간 쓸 수 있는 메모
// 한 줄 짜리 주석, //의 뒷부분부터는 주석으로 간주된다
int a; // 이렇게 문장의 끝 뒤에도 사용할 수 있다.
/* 여러 줄로 처리할 수 있는 주석 */
/*
여러 줄로
처리할 수
있는 주석
중간에 코드가 들어가 있으면 그 코드 또한 주석처리된다.
*/
// 한 줄 짜리 주석을
// 그냥 여러번
// 사용하기도 한다
메모리는 컴퓨터구조와 운영체제에서 많이 다루게 되겠지만, 프로그램은 실제 컴퓨터(하드웨어) 위에서 *운영체제(소프트웨어) 위에서 돌아가는 것이기 때문에 간략하게 설명한다.
*운영체제도 프로그램이다.
컴퓨터는 크게 아래 네 가지로 구성되어 있다.
사람이 작업하는 모든 것을 기억하기는 쉽지 않다. 작업하는 화이트보드에 적어두고 필요 없는 정보는 지우며 화이트보드의 공간을 최대한 잘 사용해야한다. 작업하는 일이 많아질수록 화이트보드는 여러 작업의 정보들로 쌓일 것이고, 더 이상 쓸 공간이 없으면 무언가를 지워야한다.
이 중 메모리에 관해서 더 비유하자면 아래처럼 되겠다.
자료형을 여러가지로 나눈 이유는 컴퓨터가 명확히 이해할 수 있으며, 이 화이트보드와 책장의 공간활용과 사람의 성능을 최대한 잘하기 위함이라고 보면 되겠다. 실수보다 정수를 더 빠르게 처리하고 덧셈과 곱셈이 나눗셈보다 더 빠르다.
데이터의 최소 단위
컴퓨터가 정보를 처리하는 단위가 비트이다. 하나의 공간에 0 또는 1의 값을 저장시킴으로서 2가지의 상태로 구분할 수 있다.
정보를 처리하는 가장 작은 단위
데이터가 어떻게 메모리에 저장되고, 프로그램에서 어떻게 처리되어야하는지를 명시적으로 알려주는 역할
많이 사용하는 자료형의 목록은 다음과 같다.
분류 | 자료형 | 크기 | 범위 | 출력 포맷 |
---|---|---|---|---|
bool | 불형 | 1Byte | true, false | |
char | 문자형 | 2Byte | -128 ~ 127 | %c |
unsigned char | 0 ~ 255 | %c | ||
short | 정수형 | -32768 ~ 32767 | %d | |
unsigned short | 0 ~ 65535 | %d | ||
int | 4Byte | -2,147,483,648 ~ 2,147,483,647 | %d | |
unsigned int | 0 ~ 4,294,967,295 | %u | ||
long | 4Byte or 8Byte | -2,147,483,648 ~ 2,147,483,647 or -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | %ld | |
unsigned long | 0 - 18,446,744,073,709,551,615 | %lu | ||
float | 실수형 | 4Byte | -3.4 X 10^38 ~ 3.4 X 10^38 | %f |
double | 8Byte | -1.7 X 10^308 ~ 1.7 X 10^308 | %lf |
bool isMale = true;
bool isHighLevel = false;
bool hasSkill = true;
// 문자의 의미로 작은 따옴표 ''사용
char ch1 = 'a'; // 'a' 자체가 97이라는 값과 대응됨
char ch2 = 97;
char ch3 = 'a' + 1; // 'a'는 97이기 때문에 거기에 1을 더하면 98임. 98을 뜻하는 문자는 b.
char ch4 = '1'; // 1을 뜻하는 문자의 실제 값은 49임. char ch4 = 49를 한 것과 동일
char ch5 = 49;
// Escape Sequence
// 표기하기 애매한 애들을 표현
// \t 아스키코드9 = Tab
// \n 아스키코드10 = LineFeed(한 줄 아래로)
// \r 아스키코드13 = CarriageReturn (커서 << )
자연수와, 자연수에 음의 기호를 붙인 음의 정수, 그리고 0을 합친 수의 모임
- 이진수로 표현함
- 다양한 범위의 자료형을 통해 메모리 공간을 효율적으로 사용할 수 있음
- 최상위 비트(MSB)는 부호 비트로 사용
short s = 20;
short s2 = -345;
unsigned short s3 = 65000; // 0과 양의 정수만을 담을 수 있는 자료형
int i = 100;
int i2 = -200;
long l = 12345678;
long l2 = -12345678;
정수 형식 자체만으로 실수를 표현하기는 까다롭다. 그래서 실수 형식도 존재하는데 크게 두 가지이다.
뜰 부, 움직일 동, 소수점
소수점의 위치를 고정하지 않는다
- 현재 우리가 사용하는 실수 형식의 표현 방식
- 표현할 수 있는 범위가 고정소수점 방식보다 월등히 큼
#include <iostream>
#include <iomanip> // 원하는 소숫점 자릿수까지 출력하기 위해 넣은 헤더
using namespace std;
int main()
{
float f = 3.14159265358979323846264f;
double d = 3.14159265358979323846264;
cout << setprecision(20); // 원하는 소숫점 자릿수까지 출력하기 위해 설정하는 함수
cout << f << endl;
cout << d << endl;
}
// 출력 결과
// 3.14159265358979323846264
// f : 3.1415927410125732422
// d : 3.141592653589793116
#include <iostream>
using namespace std;
int main()
{
cout << "char \t\t:" << sizeof(char) << " bytes\n";
cout << "bool \t\t:" << sizeof(bool) << " bytes\n";
cout << "short \t\t:" << sizeof(short) << " bytes\n";
cout << "int \t\t:" << sizeof(int) << " bytes\n";
cout << "long \t\t:" << sizeof(long) << " bytes\n";
cout << "long long \t:" << sizeof(long long) << " bytes\n";
cout << "float \t\t:" << sizeof(float) << " bytes\n";
cout << "double \t\t:" << sizeof(double) << " bytes\n";
}
/* 출력 결과
char :1 bytes
bool :1 bytes
short :2 bytes
int :4 bytes
long :8 bytes
long long :8 bytes
float :4 bytes
double :8 bytes
*/
참고한 자료