윤꽁참감 2022. 5. 27. 16:19
반응형

1. 변수

데이터를 저장하기 위해 할당받은 메모리 공간

char, int, long, long long, float, double형이 있다.

1.1. 변수 이름 생성 규칙

1. 변수의 이름은 영문자(대소문자), 숫자, 언더스코어(_ )로만 구성됩니다.

2. 변수의 이름은 숫자로 시작될 수 없습니다.

3. 변수의 이름 사이에는 공백을 포함할 수 없습니다.

4. 변수의 이름으로 C++에서 미리 정의된 키워드(keyword)는 사용할 수 없습니다.

5. 변수 이름의 길이에는 제한이 없습니다.

1.2. 변수와 메모리 주소

변수는 메모리 주소를 기억하는 역할을 한다.

변수를 참조할 때는 해당 주소에 저장된 데이터를 참조한다.

1.3. 변수의 선언

변수를 사용하려면 저장하기 위한 공간을 할당해야한다.

변수를 할당하는 행위를 변수의 선언이라고 부른다.

1.4. 변수의 선언만 하는 방법

변수를 선언한 후 나중에 초기화 하는 방법

초기화를 하지 않았기 때문에 쓰레기값이 들어있다.

초기화 하지 않은 변수는 사용하지 말아야 한다.

문법 : 타입 변수이름;

int num;
...
num = 20;

1.5. 변수의 선언과 동시에 초기화하는 방법

변수는 선언과 동시에 초기화가 가능하다.

선언하고자 하는 변수들의 타입이 같다면 동시에 선언 가능하다.

문법 : 타입 변수이름1, 변수이름2
문법 2 : 타입 변수이름1 = 초깃값1, 변수이름2 = 초깃값2
int num1, num2;
double num3 = 1.23, num4 = 4.56;

2. 상수

변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간

변수와 다르게 저장된 데이터를 변경할 수 없다.

2.1. 리터럴 상수(literal constant)

리터럴 상수는 변수와 다르게 저장된 메모리 공간을 가리키는 이름을 가지고 있지 않다.

2.1.1. 정수형 리터럴 상수 : 123, -456

10진수, 8진수, 16진수로 표현 가능하다.

여러가지 진법으로 표현하기 위해서 cout 객체는 dec, hex, oct 조정자를 제공한다.

cout 객체는 전달받은 진법의 형태를 변경하기 전까지 유지한다.
int a = 10;

cout << "숫자 10을 10진수로 표현하면" << a << "이며," << endl;
cout << oct;
cout << "숫자 10을 8진수로 표현하면" << a << "이며, " << endl;
cout << hex;
cout << "숫자 10을 16진수로 표현하면" << a << " 입니다.";
정수형 리터럴 상수는 다음과 같은 경우를 제외하면 모두 int형으로 저장된다.
- 데이터의 값이 너무 커서 int형으로 저장할 수 없는 경우
- 정수형 상수에 접미사를 사용하여 해당 상수의 타입을 직접 명시하는 경우

C++에서는 접미사를 상수의 끝에 추가하여 해당 상수의 타입을 직접 명시할 수 있다.

기본: (signed)int
u 또는 U : unsigned int
l 또는 L : (singed) long
ul 또는 uL 또는 Ul 또는 UL : unsigned long
long long 또는 ull 또는 Ull 또는 ULL : unsinged long long

2.1.2. 실수형 리터럴 상수 : 3.14, -45.6

실수형 리터럴 상수는 모두 부동 소수점 방식으로 저장된다.
모두 double 형으로 저장되며, 접미사를 추가하여 타입을 직접 명시 할수도 있다.

f 또는 F : float
기본 : double
l 또는 L : long double

2.1.3. 포인터 리터럴 상수

널 포인터(null pointer) : 아무것도 가리키고 있지 않은 포인터
nullptr : 널 포인터를 표현하는 키워드
nullptr == 0은 참(true)를 반환한다.

2.1.4. 심볼릭 상수(symbolic contant)

심볼릭 상수는 변수와 마찬가지로 이름을 가지고 있다.
심볼릭 상수는 선언과 동시에 반드시 초기화해야 한다.
매크로를 이용하거나 const 키워드를 사용하여 선언할 수 있다.

const int ages = 30;

3. 기본 타입

타입은 크게 정수형, 실수형, 문자형, bool형으로 나눠진다.

3.1. 정수형 타입

정수란 부호를 가지고 있으며, 소수 부분이 없는 수

정수형 데이터의 타입을 결정할 때는 자신이 사용하고자 하는 데이터의 크기를 고려해야 한다.

저장범위를 넘는 데이터의 크기를 저장하면 overflow가 발생해 전혀 다른 값이 저장된다.

3.2. 실수형 타입

소수부나 지수가 있는 수이며, 정수보다 훨씬 더 넓은 표현 범위를 가진다.

컴퓨터에서 실수를 표현하는 방식은 오차가 발생한다.

double형을 많이 사용한다.

3.3. 문자형 타입

작은 정수나 문자 하나를 표현할 수 있는 타입

컴퓨터는 2진수밖에 인식을 못해서 문자도 숫자로 표현한다.

아스키코드(ASCII)를 활용하는데 7비트 문자 인코딩 방식으로 총 128개의 문자를 표현할 수 있다.

숫자 하나당 문자 하나와 매칭하는 방식이다.

3.4. bool형 타입

true, false로 참과 거짓을 구분할 수 있는 타입

3.5. auto 키워드를 이용한 선언

변수의 초깃값에 맞춰 타입을 자동으로 선언한다.

4. 부동 소수점 수

4.1. 실수의 표현 방식

컴퓨터에서 실수를 표현하는 방식은 고정소수점, 부동소수점 방식이 있다.

4.2. 고정 소수점 방식

소수부의 자릿수를 미리 정하여 고정된 자릿수의 소수를 표현한다.

4.3. 부동 소수점 방식

가수부와 지수부로 나누어 표현하는 방식.

고정 소수점 방식보다 훨씬 더 많은 범위를 표현할 수 있다.

5. 타입 변환

하나의 타입을 다른 타입으로 바꾸는 행위

자동으로 타입 변환을 수행하는 경우
1. 연산 시 다른 타입끼리의 대입
2. 함수에 인수를 전달할 때

자동으로 타입이 변환될 때 표현 범위가 넓은 범위에서 좁은 범위로 변환하면 데이터가 손실된다.

5.1. 타입 변환의 종류

1. 묵시적 타입 변환(자동 변환)
2. 명시적 타입 변환(강제 변환)

5.1.1. 묵시적 타입 변환(자동 변환)

int num = 3.1415;
num의 결과는 3으로 출력된다.

타입 변환의 방향 : char - short - int - long - float - double - long double

5.1.2. 명시적 타입 변환(강제 변환)

문법
1. (변환할 타입) 변환할 데이터
2. 변환할 타입(변환할 데이터)
괄호를 타입 캐스트 연산자라고 부른다.

(예시)
int num1 = 1;
int num2 = 4;

double result1 = num1 / num2;
double result2 = (double) num1 / num2;
double result3 = double (num1) / num2;