[C++ 기초 문법] #3. 자료형, 연산자, 리터럴

YUN·2026년 2월 14일

C++

목록 보기
17/85
post-thumbnail

1. 자료형

(1) 정수형

보통 정수형은 int를 사용하나, 크기가 큰 정수를 저장할때는 long long을 사용한다.

정수형 : Overflow 문제

// ❌ 위험한 코드
int a = 100000;
int b = 100000;
int result = a * b;    // 10,000,000,000 → int 범위 초과! → 오버플로우!

// ✅ 안전한 코드
long long a = 100000;
long long b = 100000;
long long result = a * b;    // OK!

// ✅ 또는 캐스팅
int a = 100000, b = 100000;
long long result = (long long)a * b;   // 곱하기 전에 형변환!

위의 예시들에 대해서 하나 하나 살펴볼 것이다.

// ❌ 위험한 코드
int a = 100000;
int b = 100000;
int result = a * b;    // 10,000,000,000 → int 범위 초과! → 오버플로우!

위의 경우 a * b 수행시 int (4 Byte)에 10000000000(0b 0010 0101 0100 0000 1011 1110 0100 0000 0000) 에서 상위 4

비트가 날라가고 int result에 하위 32비트만 저장되는 오류가 발생한다.

// ✅ 안전한 코드
long long a = 100000;
long long b = 100000;
long long result = a * b;    // OK!

위의 경우, long long 이면 int보다 표현 범위가 크므로(비트 자리수가 많으므로), 비트가 잘리는 현상 없이 정상적으로 수를 저장할 수 있다.

// ✅ 또는 캐스팅
int a = 100000, b = 100000;
long long result = (long long)a * b;   // 곱하기 전에 형변환!

위의 경우도 a 와 b는 int지만 ab가 수행되기전에 a를 long long으로 형 변환하여 `ablong long`으로 형변환된다.

따라서 result에 정상적인 값이 저장된다.

(2) 실수형

보통 double을 사용하고, 메모리 절약이 필요한 경우 float을 사용한다.

(3) 문자형

보통 char를 사용한다.

char ch = 'A';        // 실제로 65가 저장됨
char ch2 = 65;        // 이것도 'A'

// 자주 쓰는 ASCII 값
// 'A' = 65,  'Z' = 90
// 'a' = 97,  'z' = 122
// '0' = 48,  '9' = 57

// 대문자 → 소문자 변환
char lower = 'A' + 32;   // 'a'

// 문자 → 숫자 변환
int num = '7' - '0';     // 7

char에 '를 사용해서 문자를 저장하더라도, 이는 내부적으로 상응하는 ASCII 코드로 바뀌어 정수 형태로 char 에 저장된다.

이를 이용하면 위와같이 대문자 <-> 소문자, 문자 <-> 숫자 변환이 가능하다.

(4) 문자열

C++ 에서는 2가지 방식(C 스타일, C++ 스타일)으로 문자열을 사용할 수 있다.

  • C 스타일 : char []
    • 문자열(배열) 한 번 생성하면 크기 변경 불가
    • 문자열(배열) 의 마지막에 자동으로 \0 이 붙는다.
  • C++ 스타일 : string 객체 (#include <string> 해야 사용할 수 있다)
    • 자유롭게 크기 변경 가능
    • #include <string> 을 꼭 해주어야한다.
#include <string>

// C 스타일 (배열)
char s1[10] = "hello";     // 실제: ['h','e','l','l','o','\0',...]
                            // 크기 변경 불가!

// C++ 스타일 (string 객체)  
string s2 = "hello";
s2 += " world";            // 이어붙이기 가능!
int len = s2.length();     // 길이: 11

(5) void

(6) 코테 꿀팁

문제에서

(1) 입력값이 매우 크거나
(2) 코드 실행 과정에서 숫자가 너무 커질 것 같거나
(3) "답이 매우 클 수 있으므로..."라는 문구가 보이면

정수long long으로, 실수double로 사용한다.

2.연산자

(1) 산술 연산자

int a = 10, b = 3;

a + b;    // 13   덧셈
a - b;    // 7    뺄셈
a * b;    // 30   곱셈
a / b;    // 3    나눗셈 (정수끼리는 소수점 버림!)
a % b;    // 1    나머지 (모듈러, 코테에서 엄청 자주 씀)

// ⚠️ 정수 나눗셈 주의
7 / 2;        // 3 (소수점 버림)
7.0 / 2;      // 3.5 (하나라도 실수면 실수 나눗셈)
(double)7 / 2; // 3.5

연산에서 하나라도 실수 자료형이면 결과도 실수 자료형으로 형변환된다.

(2) 비교 & 논리 연산자

// 비교 (결과: true/false)
a == b    // 같다
a != b    // 다르다
a < b     a > b     a <= b    a >= b

// 논리
a && b    // AND: 둘 다 true여야 true
a || b    // OR: 하나만 true여도 true
!a        // NOT: a가 0이면 1, 0이 아니면 0

(3) 비트 연산자

a & b     // AND   (둘 다 1이면 1)
a | b     // OR    (하나라도 1이면 1)
a ^ b     // XOR   (다르면 1)
~a        // NOT   (비트 반전)
a << n    // 왼쪽 시프트 (× 2^n 와 동일)
a >> n    // 오른쪽 시프트 (÷ 2^n 와 동일)

(4) 삼항 연산자

// 조건 ? 참일때값 : 거짓일때값
int mx = (a > b) ? a : b;    // max(a, b)와 동일

a > b가 참이면, (a > b) ? a : ba를 반환하고,
a > b가 거짓이면, (a > b) ? a : bb를 반환한다.

(5) 증감 연산자 & 복합 대입

a++; ++a;    // a = a + 1
a--; --a;    // a = a - 1

a += 5;      // a = a + 5
a -= 3;      // a = a - 3
a *= 2;      // a = a * 2
a /= 4;      // a = a / 4
a %= 3;      // a = a % 3

여기서 중요한 점이, a++++a는 동작 방식이 다르다.

  • a ++ : 우선 현재 a값을 그대로 사용하고, 마지막에 a에 1을 더한다
  • ++ a : 우선 a에 1을 더하고, update된 a의 값을 사용한다.

3. 리터럴

리터럴이란, 값 자체 를 의미한다.

int n = 42;        //  42     ← 이게 리터럴
double d = 3.14;   //  3.14   ← 이게 리터럴
char c = 'A';      //  'A'    ← 이게 리터럴
string s = "hello";//  "hello" ← 이게 리터럴
bool b = true;     //  true   ← 이게 리터럴

정수 리터럴은 int 타입이고, 실수 리터럴은 double 타입이다.

profile
안녕하세요. 전자공학부 학부생의 공부 기록입니다.

0개의 댓글