본문 바로가기

C++

C++ 배우기 2(자료형과 연산자)

저번 시간에...

컴파일 과정

전처리기

주석 제거, include 처리, 매크로 확인. 한마디로 필요한 것 넣고 필요 없는 것 제거

 

컴파일러

어셈블리어로 번역

 

어셈블러

기계어로 번역

 

링커

마지막에 하나로 묶어 exe 파일 생성. 컴파일 과정에서 링커가 중요하다.

 


 

매크로

매크로 선언 방법

위 사진의 define은 정의하다 라는 뜻으로, 앞으로 MAX를 30으로 정의하겠다는 것이 된다.


#if ~ #endif

저번에 설명 했듯이 int main()은 코드의 진입점을 나타내고 있다.

하지만 int main()이 두 번 선언되어 있다면 오류가 날 텐데, 위 사진에서 #if ~ #endif 가 그 오류를 막아주고 있다.

자세히 보면 #if 뒤에 0 과 1이 있을 텐데, 0이 있는 곳의 내용은 출력대상에서 제외시키고,

1이 있는 곳의 내용이 출력대상이 되기 때문에 오류가 나지 않는다.

따라서 출력하면 "Bye World!"만 출력될 것이다.

 

using namespace std;

저번과는 다르게 cout을 사용할 때, 앞에 std :: cout을 사용하지 않는데, 위에서 미리 namespace를 선언했기 때문이다.

따라서 앞으로는 번거롭게 std :: cin 식으로 코딩하지 않아도 된다.


변수

변수란, 수학에서는 무엇이 들어갈지 모르는 미지수를 말하지만, 프로그래밍에서는 데이터를 저장할 수 있는 공간을 말한다. 쉽게 말하자면 음식(데이터)을 담을 수 있는 그릇(변수)라고 생각하면 편하다.

그리고 변수가 저장되는 곳이 메모리(RAM)이다.

 

보통 변수에 메모리를 할당한다고 말하는데, 할당해줄 때의 메모리 단위는 bit < byte < KB < MB < GB < TB 순으로 있다.

1byte는 8bit 와 같은 메모리라는 것을 알아두는 것도 나중에 좋다.

 

그리고 우리는 변수가 저장된 메모리에 찾아가기 위해서는 메모리 주소를 알아야 하는데, 이 메모리 주소는 byte 단위로

표현하고 있다. 우리가 변수를 사용하기 위해선 선언 - 정의 - 호출의 순서를 거치게 된다.

 

상수(리터럴)

변수와 반대되는 느낌의 정의로 절대 변하지 않은 값을 말한다.

예를 들어 d = 3;은 변수 d에 3의 값을 저장한다는 뜻이다. 하지만 3 = d;는 불가능하다.

3이라는 숫자를 d로 대체할 수 없기 때문이다. 말 그대로 대체 불가능한 것을 말한다.

- 리터럴 상수 : 1, 2, 3, 4... 등

- 리터럴 문자 : a, b, c, d... 등


C++ 자료형(type)

위 사진처럼 여러 가지 자료형이 있다. 앞서 말했듯이 크기는 byte단위로 셀 수 있고, 범위는 해당하는 자료형이 받을 수 있는 크기를 의미한다. C 자료형을 알고 있다면 더욱 쉽게 접근할 수 있을 것이다.

자료형에도 정수형, 실수형, 문자형, 논리형의 종류가 존재한다.

 

정수형

int : 양수, 음수, 0을 포함한 수를 나타낼 수 있다. (4byte)

short : 양수, 음수, 0을 포함한 수를 나타낼 수 있지만 int보다 적은 크기 (2byte)

long : 양수, 음수, 0을 포함한 수를 나타낼 수 있다. (4byte)

long long : 양수, 음수, 0을 포함한 수를 나타낼 수 있고, int와 long보다 훨씬 더 큰 크기 (8byte)

 

선언 방식 : int (자료형)  a (callname) ;

정의 방식 : a = 10;

호출 방식 : cout << a << endl;

*endl : endline의 줄임말. \n과 같은 역할로 C++에서 사용함

 

실수형

float : 소수점 단위 표현이 가능하며, 근삿값을 나타내 준다. (4byte)

선언 방식 : float (자료형)  b (callname) ;

정의 방식 : b = 3.14f;

호출 방식: cout << b << endl;

* 만약 정수형 int에 실수형 float의 값을 넣고 출력할 시, 뒤의 소수점은 생략이 된다.

 

문자형

char : 간단한 문자들을 나타낼 수 있다.

선언 방식 : char (자료형)  c (callname) ;

정의방식 : c = 'a';

 

논리형

bool : 1 아니면 0의 값을 통해 true와 false를 나타낼 수 있다.

* 1은 true, 0은 false를 나타내며 1 이외의 다른 수들을 넣어도 true가 출력됨


C++ 연산자

연산자 종류

위 사진은 연산자의 종류이며 마찬가지로 C언어를 배웠다면 쉽게 이해할 수 있을 것이다.

= 도 대입 연산자라고 부르며 연산자 중 하나이다.

연산자에는 우선순위가 존재한다. 우리가 수학을 배울 때, 곱셈과 덧셈이 있으면 곱셈을 먼저 하는 것과 같은 개념이다.

밑의 사진을 보면 우선순위에 대해 말하고 있다.

 

연산자 우선순위

예를 들어 a = 3 + 4; 는 a에 7의 값을 넣어준다는 뜻이다.

하지만 cout << a = 3 + 4 << endl; 은 연산자 우선순위 오류가 발생한다.

위 사진에 따라 확인해보면 a = 7까지 처리되지만, 대입 연산자의 우선순위가 제일 낮기 때문에 오류가 생기게 된다.

따라서 cout << (a = 3 + 4) << endl;처럼 괄호를 넣어준다면 해결된다.


마지막으로 저번에 빌드 후 바로 콘솔 창이 종료되는 것을 막기 위해 int exit; cin >> exit; 의 코드를 추가해주었었다.

이는 바로 변수 입력 대기상태를 만들어 바로 종료가 되는 것을 막기 위해서였다는 것을 알 수 있었다.