C++ 같이 배워요

[C++] Day 3 - 자료형 및 연산자

kkigon 2025. 7. 9. 12:10

C++에서는 어떤 자료형이 있고, 어떻게 연산이 진행되는지 구체적으로 알아볼 것이다.

주로 PS에서 쓰이는 것들로 알아보자.

 


자료형

 

기본 빌트인(built-in) 자료형

 

void

크기:0

그냥 아무것도 아닌 자료형이다. 함수 반환 등에 쓰인다.

 

nullpointer

decltype(nullptr)

크기:0

 

논리형

bool

크기:1 byte

범위:0~1

예시:

bool ok = (x>0);

 

문자형

(signed) char

크기: 1 byte

범위: -128~127

예시:

char c='A';

작은따옴표를 씀에 주의하자. 큰따옴표를 쓰면 string이다.

 

unsigned char

크기: 1 byte

범위: 0~255

예시:

unsigned char s = 'A';

 

 

왜 문자형인데 범위가 정수일까? 이는 사실 C++ 내에서 아스키로 문자를 저장하기 때문이다. 따라서 'A'는 사실 65라는 정수로 저장되어있다. 그래서 다음이 가능하다.

 

char s = 'A';
int i = s;
cout << i; // 65

 

그렇다면 signed와 unsigned의 차이는 뭘까? signed는 값이 음수가 될 수도 있다. 그래서 200 등의 큰 값을 집어넣으면 -56이 된다. 이게 문자하고 뭔 관련이 있는지는 모르겠다. 일단 실전 PS에서는 문자를 다룰 때 그냥 signed를 쓰는 모양이다.

 

정수형

(signed) short (int)

크기: 2 byte

범위: -32,768 ~ 32,767

예시:

short a = 65;

 

 

unsigned short (int)

크기: 2 byte

범위: 0~65,535

예시:

unsigned short a = 65;

 

(signed) int

크기: 4 byte

범위: -2,147,483,648 ~ 2,147,483,647 (플마 20억)

예시:

int a = 65;

 

unsigned int

크기: 4 byte

범위: 0 ~ 4,294,967,295

예시:

unsigned int a = 65;

 

일상적으로 가장 많이 쓰이는 정수 자료형이다. 다만 몇몇 문제에서 값이 2,147,483,647보다 커질 때에는 까먹지 말고 long long을 써주도록 하자.

int a = 3000000000;
cout << a; // -1294967296

unsigned int a = 3000000000;
cout << a; // 3000000000

 

 

(signed) long (int)

크기: 8 byte

범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

예시:

long a = 3000000000;

 

unsigned long (int)

크기: 8 byte

범위: 0 ~ 18,446,744,073,709,551,615

예시:

unsigned long a = 3000000000;

 

(signed) long long (int)

크기: 8 byte

범위: -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

예시:

long long a = 3000000000;

 

unsigned long long (int)

크기: 8 byte

범위: 0 ~ 18,446,744,073,709,551,615

예시:

unsigned long long a = 3000000000;

 

 

아니 그러면 long과 long long은 무슨 차이일까?

long은 최소 32비트, long long은 최소 64비트라고 하다. 그런데 보통 PS에서는 long보다는 long long을 많이 쓰는 것 같다.

 

 

실수형

float

크기: 4 byte

범위: ±3.4×10^(-37) ~ ±3.4×10^(38) (대충 7개 유효자릿수)

예시:

float a = 3.14;

double

크기: 8 byte

범위: ±1.7×10^(-307) ~ ±1.7×10^(308) (대충 15~17개 유효자릿수)

예시:

double a = 3.14159265358979;

 

long double

크기: 8 byte

범위: ±1.7×10^(-307) ~ ±1.7×10^(308) 이상

예시:

long double a = 3.14159265358979;

 

외부 라이브러리(?) 자료형

string

C++에서 기본적으로 지원해주는 내장 자료형은 아니다. 쓰려면 #include <string>을 해줘야 하며, 이는 #include <bits/stdc++.h> 호출해주면 자동으로 불러와진다. PS에서 문자열을 다룰 때 굉장히 많이 쓰인다.

 

사용 예시

string s = "apple";

 

char과는 다르게 큰따옴표를 사용해주는 것이다.

 

다음으로, 이 string 자료형을 다른 자료형으로 변환해주는 방법을 알아보자.

여기를 참고하자.

 

https://life-with-coding.tistory.com/283

 

[C++][형변환] int to string, string to int / int to char, char to int

인트로 안녕하세요. 오늘은 C++ 형변환에 대해서 포스팅하겠습니다. (형변환) int char* : https://life-with-coding.tistory.com/284 (형변환) int string : https://life-with-coding.tistory.com/283 int string 형변환 알고리즘

life-with-coding.tistory.com

 

만약 어떤 문자열 안에 특정 글자가 있는지 찾아보려면 어떻게 하는가? 파이썬에서는 그냥 in 만 이용해주면 되는데, C++은 조금 복잡하다.

여러가지 방법중에서도 그나마 가장 간단한 방법은 다음과 같다.

string s = "apple";
bool check = (s.find('e') != string::npos);

 

"apple"이라는 string에서 'e'라는 char를 찾으려면 s.find()를 해주면 된다. 이의 반환값은 인덱스인데, 만약 없다면 npos라는 특수한 값을 리턴한다. 이를 체크해주는 것이다.

 

string의 더 많은 내장함수와 기능들에 대해서는 아래 블로그를 참고하자.

https://rebro.kr/53

 

[C++] string (문자열) 클래스 정리 및 사용법과 응용

[목차] 1. string 클래스란? 2. string 클래스의 입출력 3. string 클래스 생성 4. string 클래스 연산자 활용 5. string 클래스의 멤버 함수 6. string 클래스의 멤버 함수 사용 예시 1. string 클래스란? - C++ STL에

rebro.kr

 


연산자

 

적기 귀찮다. 아래 포스팅을 참고하자.

https://songsite123.tistory.com/8

 

[C++] 연산자 총 정리 (Operator)

C++ 은 여러 종류의 연산을 위해 다양한 연산자(operator) 을 제공합니다. C++ 의 연산자를 총 정리하는 포스팅입니다. 산술 연산자(arithmetic operator) 대입 연산자(assignment operator) 증감 연산자(increment an

songsite123.tistory.com

 

다만 딱 하나, 파이썬에서 C++로 넘어올 때 파이썬 코더들이 처음 보지만 C++에서 엄청 많이 쓰는

전위/후위 증감 연산자에 대해서 예시와 함께 구체적으로 알아보자.

 

++i, --i와 같은 전위 증감 연산자는 일단 i에 증감 연산을 적용하고, 이를 반환한다.

i++, i--와 같은 후위 증감 연산자는 일단 i를 반환하고, 그 후에 증감 연산을 한다.

 

아래 예시를 보면 둘의 차이점이 바로 이해된다.

 

int main() {
    int a = 3;
    int b = ++a;  // a:4,  b:4   (a를 1 증가시킨 뒤 그 값을 b에 대입)
    int c = a--;  // a:3,  c:4   (c에 a를 먼저 대입하고, 이후 a를 1 감소)
}