Cpp.01 Dealing with Data

oat·2024년 1월 10일

C++

목록 보기
2/10
post-thumbnail

Section 01

변수 선언과 규칙

변수란?

변할 수 있는 수
cf. 상수: 변할 수 없는 수

int a

=> int라는 자료형에 a라는 이름


변수를 사용할 때,

1. 변수의 자료형

2. 변수의 이름

  1. 숫자로 시작할 수 없다
    ex. int 17oatmeal;
  2. C++에서 사용하고 있는 키워드는 사용할 수 없다
    ex. int return;
  3. white spacd를 사용할 수 없다.
    ex. int my name;
  • 선언: 변수의 자료형과 이름을 명시하는 것
  • 대입: 선언된 변수에 값을 넣는 것

선언된 변수는 언제나 이름으로 불러와서 그 값을 대입할 수 있다

  • 초기화: 선언과 동시에 대입하는 것
    ex. int oat = 17;

변수에 값이 잘 들어있는지 확인


코드 중간에 변수의 값을 변경할 수도 있다

변수 사용 시 규칙

변수는 사용되기 이전에 정의되어야 한다

블록에 대해서도 유효

{ int b;
	{
    	int a;
        b = 3;
    }
    a = 5;
}

b의 경우, 안쪽 블록에서 사용할 수 있으나
a의 경우, 정의한 안쪽 블록이 끝났기 때문에 사용할 수 없다

3. 변수가 어디에 저장되는가(메모리 영역)?

어디에 저장되는지는 알아야 하지만 컴파일러가 자동으로 결정해준다
변수 앞에 주소 연산자 &를 붙이면 알 수 있다


정수형 자료형과 실수형 자료형

정수형

소수부가 없는 수

  • 음의 정수
  • 0
  • 양의 정수

메모리에 저장하기 때문에 특정 상황에 알맞은 자료형을 지정해야 한다

short

2바이트, -32767 ~ +32767

int

4바이트, -2,147,483,648 ~ 2,147,483,647

long

4바이트, -2,147,483,648 ~ 2,147,483,647

long long

8바이트, -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

unsigned가 자료형 앞에 붙게 되면 음의 값을 저장할 필요가 없다
음의 값에 쓰던 공간을 양의 값으로 가져와서 저장할 수 있는 최대값을 늘릴 수 있다

cf. 강의 듣다가 궁금해져서 알아본 int와 long의 차이점

int는 최소 2byte 의 범위를 포함한 정수형이며, 32bit 까지는 아키텍처에 따라서 크기가 달라지지만 그 이상에서는 4byte로 고정된다
long 의 크기는 OS 와 어플리케이션의 bit에 따라 달라진다
출처 - https://hackerpark.tistory.com/entry/C%EC%96%B8%EC%96%B4-int-%EC%99%80-long-%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%8B%A4%EB%A5%BC%EA%B9%8C-short-short-int-int-long-int-long-long-long
??...그만 알아보자

코드를 통해 확인


실수형

소수부가 있는 수
ex. float, double

정수형 자료형을 가진 변수에 실수를 대입하면 소수점을 버리고 정수부만 출력된다


문자형 자료형과 bool형 자료형

문자형 자료형

char

작은 문자형(하나의 단어)을 표현하고자 할 때 사용 -> 작은 따옴표
작은 문자형? 문자마다 대응되는 아스키코드 값(숫자)가 작은 문자

int a = 77;
char b = a; // b의 값은 M이 된다

한글은 넣을 수 없다

string

큰 문자형
추후에...

cf. 작은 문자형은 작은 따옴표, 큰 문자형은 큰 따옴표만 써야 하는 이유

C++에서 어디까지 출력해야 하는지 알려 주는 null 문자('\0) 때문
큰따옴표("")는 명시적으로 null 문자가 포함되어 있다 => string

한 단어만 가져야 하는 char에 큰따옴표로 "a"를 넣게 되면 실제로는 a와 \0을 넣게 되므로 사용할 수 없다

bool형 자료형

bool

0 혹은 1, fales 혹은 true
조건문에서 많이 사용하게 되는 변수

0 이외의 모든 수를 1로 저장한다

코드를 통해 확인



const 제한자와 데이터형 변환

C에서...

원의 넓이를 구하는 프로그램

#include <iostream>
#define PIE 3.1415926535
using namespace std;

int main() {

	int r = 3;
	float s = r * r * 3.14; // =>  r * r * PIE 대체

	int r2 = 4;
	float s2 = r2 * r2 * 3.14; // =>  r2 * r2 *PIE 대체
	
	cout << s << endl;

	return 0;
}

3.14가 아니라 3.1415926535라면 입력할 때마다 틀릴 수도 있고, 매번 입력하는 것이 번거롭기도 하여 문제가 된다

  1. 바뀔 필요가 없는 수
  2. 바뀌어서는 안되는 수

= 상수
#define PIE 3.1415926535를 해주면 원주율 수를 PIE로 대체할 수 있어진다

C++에서... const 제한자

C와 달리 사용할 상수의 자료형까지 선언한다

#include <iostream>
using namespace std;

int main() {

	const float PIE = 3.1415926535;

	int r = 3;
	float s = r * r * 3.14; // =>  r * r * PIE 대체

	int r2 = 4;
	float s2 = r2 * r2 * 3.14; // =>  r2 * r2 *PIE 대체

	cout << s << endl;

	return 0;
}
  1. 상수이기 때문에 변수처럼 중간에 값을 바꿀 수 없다
PIE = 10.0; // error
  1. 선언과 동시에 값을 대입하여 초기화하여야 한다
const float PIE;
PIE = 3.1415926535; // error

const float PIE = 3.1415926535; // correct

데이터형 변환

데이터형 변환이 일어날 때

  1. 특정 데이터형의 변수에 다른 데이터형의 값을 대입했을 때
  2. 수식에 데이터형을 혼합하여 사용했을 때
  3. 함수에 매개변수를 전달할 때

강제적으로 데이터형 변환

typeName(a) or (typeName)a

char ch = 'M';
cout << (int)ch << " " << int(ch) << endl;

C++에서만 존재하는 데이터형 변환 코드

static_cast<typeName>

추후에 프렌드를 배우며...


C++ 산술연산자와 auto

C++에서의 산술연산자

  • 연산자
    : +, -, *, /, % 등
  • 피연산자
    : 연산의 대상 (ex. 숫자)

연산자

'+' = 두 개의 피연산자의 합을 계산
'-' = 첫번째 피연산자에서 두번째 피연산자를 뺀다
'*' = 두 개의 피연산자의 곱을 계산
'/' = 첫번째 피연산자를 두번째 피연산자로 나누었을 때의 몫
'%' = 첫번째 피연산자를 두번째 피연산자로 나누었을 때의 나머지 (실수 사용 불가)

계산 우선 순위는 기존 수학의 계산 우선 순위와 같고, 같은 우선 순위라면 왼쪽부터 오른쪽으로 진행한다

auto

C++만의 데이터형
초기화하는 값을 보고 데이터형을 추론하여 자동으로 데이터형을 결정한다

auto n = 100;
auto x = 1.5;
auto y = 1.3e12L

n은 int형, x는 float형, y는 long long형으로 결정할 것이다

사용자가 3개의 float형 변수를 만들고 싶을 때,

auto x =0.0;
float y =0;
auto z = 0;

auto를 사용한다면 x는 float형으로 지정되나, z는 int형으로 지정될 것이다

auto를 사용했을 때 원하는 자료형으로 지정되지 않아 에러가 발생할 수 있으므로 지나치게 의존하는 것은 지양하자

0개의 댓글