[c++] c++입문④ - 상수/리터럴

반응형

상수 constant

프로그램의 실행동안 변하지 않는 영구한 값을 가지는 것


특징

- const 키워드를 사용하여 상수 변수의 값이 변경될 수 없음을 의미
- 같은 수치의 값을 반복 입력할 필요없이 간단히 상수이름을 사용
- 값을 하나의 공간(선언부분)에서 관리·변경
- 상수 의미에 부합하는 이름을 통해 프로그램의 가독성이 높아짐

 


상수 선언

const datatype CONSTANTNAME = value;

- 상수는 선언과 초기화가 한 번에 이루어져야함
  * 관습상 상수이름은 대문자로 작성한다

 

const double PI = 3.14159; 



* 데이터 저장 범위

- 모든 데이터는 데이터 유형에 따라 저장할 수 있는 값의 범위를 가지며 컴파일러는 이에 따라 변수/상수의 메모리 공간을 할당

short (int) 
unsigned short (int) 
int 
unsigned (int) 
long (int) 
unsigned long (int) 
float 
double 
long double   

* 표현력의 크기가 작은 순서대로 나열(여기서 크기란 메모리 사이즈가 아닌 표현력의 크기를 뜻함)한 것이다. 이 순서대로 알아두는 것이 좋다. 피연산자 변환을 할 때 크기가 작은 쪽에서 큰 쪽으로 타입을 변환하기 때문이다. 


o 정수형
c++은 정수를 표현하는데 short, int, long의 3가지 유형을 사용한다.  각 유형은 부호가 있는 signed와 부호가 없는 unsigned로 구분된다. signed는 -와 + 부호가 모두 존재 한다. 절반은 음수가 되고 나머지가 양수가 되는 것이다. unsigned는 음수 영역이 없이 모두 양수로 사용된다.  signed와 unsigned를 비교해보면 같은 데이터 유형이라면 실제 할당된 공간이 같기 때문에 표현할 수 있는 수의 개수는 같으나 최댓값은 음수가 없는 unsigned가 크다.


o 실수형
실수를 표현하는 방법에는 float, double, long double의 3가지 방법이 있다.
double 형은 float의 두배 크기이므로 double은 배정도 float는 단정도라고도 한다.(뭐래? 한국어 표기를 머리에 담아둘 필요는 없음)



데이터 유형의 크기는 운영체제에 따라 다르다. 데이터 유형의 크기를 알고 싶을 때는 sizeof 함수를 사용해서 정확히 확인해야한다.

cout << sizeof(data type); 



cout << "int : " << sizeof(int) << endl; 
cout << "double : " << sizeof(double) << endl; 



리터럴 literal

프로그램에서 직접 사용 되는 상수 값

* 상수와 다름
 - 상수는 값을 가지는 변수이나 그값을 바꿀 수 없는 변수를 뜻함
 - 즉, 상수는 메모리에 변수를 지정하고 그 변수에 값을 초기화한 다음에는 값을 바꿀 수 없는 변수


리터럴 사용법

o 정수형

- 정수 리터럴은 기본적으로 int형으로 간주
- long형의 리터럴은 숫자 뒤에 L을 붙임
- 8진수 리터럴을 만들 때는 앞에 0을 붙임
- 16진수 리터럴을 작성 하려면 앞에 0x 붙임

 

o 실수형

- 실수 리터럴은 기본적으로 double형으로 간주
- float형의 리터럴은 숫자 뒤에 F를 붙임
*실수값을 정수 변수에 저장할 때 실수값의 소숫점 이하는 버려진다(반올림되지 않음).

 

 

 

연산자


수 관련 연산자

+, -, *, /,% 등

- 정수 나눗셈의 결과는 정수가 되며 나머지는 버려진다.

5/2는 int 값 2가된다.
5.0/2는 double 값 2.5가 된다. 

- c++에서 %(나머지 연산자)는 정수에서만 사용할 수 있으며,  프로그램 작성시 유용하게 사용
  * 짝수·홀수, 요일, 시간 계산 등 알고리즘 문제에서도 단골로 출제됩니다

- 변수에 임의의 값을 저장할 때 값이 저장할 수 있는 크기보다 크면 오버플로우(overflow)가, 저장할 수 있는 크기보다 작으면 언더플로우(underflow)가 발생한다. 
* c++은 오버플로우나 언더플로우시 경고나 오류를 발생하지 않으므로 임의 유형의 최대치나 최소치에 근접한 값을 사용할 때 주의하는 것이 좋다.


단축 연산자


c++에서는 대입연산자= 수관련 연산자를 붙여서 만든 단축연산자 형태를 지원
+=, -=, *=, /=, %=, ++, --

전치증가 연산자 ++x : 변수의 값을 우선 1만큼 증가시킨 후 사용된다.
후치증가 연산자 x++ : 변수의 값을 사용 후 1만큼 증가시킨다.
전치감소 연산자 --x
후치감소 연산자 x--

int num = 10;
int newNum1 = 10 * num++
int newNum2 = 10 * ++num

일 때 newNum1은 100이 되고 newNum2는 110이 된다.

* ++, --는 수식이 아닌 단독으로 변수의 앞에 쓰거나 뒤에 쓰는 경우, 결과적으로 같은 결과를 갖는다. 
* c++에서는 피연산자 수행 순서를 준수하지 않기 때문에(연산을 할 때 왼쪽부터 하나 오른쪽부터 하나 상관없다), 피연산자 수행 순서의 준수가 필요한 모호한 코드는 작성하지 않는 것이 좋다.


수의 유형 변환 
c++에서는 형변환(캐스팅, casting)을 사용하여 값을 다른 유형의 값으로 변경할 수 있음

강제형변환 (명시적인 캐스팅)
static_cast<type>(value); value 값을 type유형으로 변환한다.
static_cast<double>(3); 이라면 3.0이 된다.

자동형변환(암시적인 캐스팅) 
long double > double > float > unsigned long (int) > long (int) > int > unsigned short (int) > short (int) 
순으로 자동적으로 형변환된다.
double d = 3; 이라면 d = 3.0 이 된다.
 
문자 데이터 유형 char은 문자 하나를 정의하며 char의 크기는 1Byte이다
문자 리터럴은 문자 앞 뒤에 단일 인용 부호''로 표시하고 문자열 리터럴은 이중 인용부호''를 사용해야 한다.


 
이스케이프 문자
다음 문자가 특수 문자임을 알리기 위하여 백슬래시 사용
\b, \t, \n, \f, \r, \\, \', \''

그가 "안녕"이라고 말했다. 를 출력하고 싶다면 
"는 코드상에서 키워드로 사용되기 때문에 "를 콘솔 입력하기 위해서는 cout << "그가 \"안녕\"이라고 말했다."; 와 같이 출력 이스케이프 문자로 출력해야함

\n은 endl과 같은 역할을 한다.

반응형
그리드형

댓글

❤️김세인트가 사랑으로 키웁니다❤️