타입
1. 변수
1) 변수 (variable)
: 데이터를 저장하기 위해 프로그램에 의해 이름을 할당 받은 메모리 공간
즉 변수는 데이터를 저장할 수 있는 메모리 공간을 의미하고, 저장된 값은 변경 가능
정수형 : char형, int형, long혈, long long혈
실수형 : float형, double형
구조체 : 서로다른 변수형 데이터 묶어서 처리 가능 ( 정수형, 실수형 같이 사용 가능)
2) 변수 이름 생성 규칙
: 변수 이름 생성시 저장할 데이터를 잘 나타낼 수 있게 지으면 좋음
(1) 변수 이름은 영문자(대소문자),숫자,언더바( _ )로만 구성 가능
(2) 변수 이름 숫자로 시작 불가
(3) 변수 사이에 공백 포함 불가
(4) 변수 이름으로 c++에 미리 정의된 키워드 사용 불가 ex) int, double
(5) 변수 이름의 길이 제한 없음
3) 비트(bit)와 바이트(byte)
: 컴퓨터는 2진수로 모든 데이터 처리 및 표현함
(1) 비트 : 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위
2진수의 값(0과1)을 단 하나만 저장 가능
(2) 바이트 : 비트 8개가 모여서 구성됨
한 문자를 표현할 수 있는 최소 단위
4) 변수와 메모리 주소
: 변수는 기본적으로 메모리 주소를 기억하는 역할을 함
메모리 주소는 물리적인 메모리 공간을 서로 구분하기 위해 사용되는 일종의 식별자
즉, 메모리 주소 = 메모리 공간에서 정확한 위치를 식별하기 위한 고유 주소 의미
변수 참조 시 메모리 주소를 참조하는 것이 아닌, 해당 주소에 저장된 데이터를 참조하는 것
따라서 변수는 데이터가 저장된 메모리의 주소뿐만 아니라, 저장된 데이터의 길이와 형태에 관한 정보도 같이 기억해야함
하나의 메모리 공간에 8bit로 된 1byte 데이터 저장됨
위의 변수는 총 4개의 메모리 공간을 가지므로, 총 4byte의 데이터 저장 중
+) 메모리 한 공간 크기 : 1byte
5) 변수 선언
: 변수 사용전 변수를 저장하기 위한 메모리 공간 할당받아야함
이런 행위를 변수의 선언이라 부름
변수 선언만 하기
: 변수를 선언하여 메모리 공간 할당 받고, 나중에 변수 초기화
변수 초기화 안해서 해당 메모리 공간에는 쓰레기 값이 들어있음
프린트 하면 이상한 값 나옴문법
타입 변수이름;
예제
int num; num = 20;
만약 선언한 데이터 타입과 다른 타입을 저장할 경우, 저장된 데이터에 변형이 일어날 수 있으니 주의!
변수 선언과 동시에 초기화하기
: 변수 선언과 동시에 그 값 초기화 가능
선언하고자 하는 변수들의 탕비이 같다면 동시에 선언 가능- 문법
1. 타입 변수이름1, 변수이름2; 2. 타입 변수이름3 = 초깃값, 변수이름4 = 초깃값;
- 예제
int num1,num2; double num3 = 1.23,num4 = 4.56;
선언하고자 하는 변수 타입 서로 다르면 동시 선언 불가
2. 상수
1) 상수 (constant)
: 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간을 의미
변수와의 차이점은 프로그램이 실행되는 동안 메모리에 저장된 데이터가 변경 불가
2) 표현 방식에 따른 상수
리터럴 상수 (literal constant)
: 변수와 달리 데이터가 저장된 메모리 공간을 가르키는 이름이 없음
1) 정수형 리터럴 상수
: 아라비아 숫자와 부호로 직접 표현됨
ex) 123,-456
2) 실수형 리터럴 상수
: 소수 부분을 가지는 아라비아 숫자로 표현됨
ex) 3.14,-45.6
3) 문자형 리터럴 상수
: 따옴표('')로 감싸진 문자로 표현됨
ex) 'a','Z'정수형 리터럴 상수
: 아라비아 숫자와 부호로 직접 표현됨
ex) 123,-456
10진수, 8진수(0으로 시작),16진수(0x로 시작)으로도 표현 가능
cout 객체에도 dec,hec,oct 조정자 제공(사용자가 변경하기 전까지 출력되는 진법 형태 유지 가능)예제
#include <iostream> using namespace std; // 이거 쓰면 편해져 int main() { int a = 10; cout << "숫자 10을 10진수로 표현하면 " << a << "이며," << endl; cout << oct; cout << "숫자 10을 8진수로 표현하면 " << a << "이며," << endl; cout << hex; cout << "숫자 10을 16진수로 표현하면 " << a << "이며," << endl; return 0; }
실행 결과
숫자 10을 10진수로 표현하면 10이며, 숫자 10을 8진수로 표현하면 12이며, 숫자 10을 16진수로 표현하면 a 입니다.
1) 정수형 리터럴 상수의 타입
: c++에서 정수형 리터럴 상수는 다음과 같은 경우 제외하면 모두 int형으로 저장됨- 데이터 값이 너무 커서 int형으로 저장 불가
- 정수형 상수에 접미사를 사용해서 해당 상수의 타입을 직접 명시하는 경우
- c++에서는 접미사를 상수의 끝에 추가하여, 해당 상수의 타입 직접 명시 가능
접미사를 추가하여 나타낼 수 있는 정수형 타입
접미사 타입 기본 설정 (signed) int형 u 또는 U unsigned int형 l 또는 L (signed) long형 ul 또는 uL 또는 Ul 또는 UL unsigned long형 long long 또는 ull 또는 Ull 또는 uLL 또는 ULL unsigned long long형
실수형 리터럴 상수의 타입
: c++에서 실수형 리터럴 상수는 모두 부동 소수점 방식으로 저장됨
이러한 실수형 리터럴 상수는 모두 double형으로 저장됨
접미사 추가해서 저장되는 타입 직접 명시도 가능접미사를 추가하여 나타낼 수 있는 실수형 타입
접미사 타입 f 또는 F float형 기본 설정 double형 l 또는 L long double형
- 포인터 리터럴 상수
: 널 포인터(null pointer)란 아무것도 가리키고 있지 않은 포인터를 의미
nullptr 키워드를 사용하여 널 포인터 표현 가능
nullptr 키워드를 사용한 리터럴 상수의 타입은 포인터 타입이고, 정수형으로 변환 불가
0을 사용해서 널 포인터 명시 가능 (nullptr == 0 은 true(참)을 반환)
but nullptr 리터럴 상수 사용하는 것이 좀 더 안전한 프로그램 만들 수 있음 - 이진 리터럴 상수
: 0B 또는 0b의 접두사와 0과 1의 시퀀스를 가지고 이진 리터럴 상수 표현 가능
- 예제
auto a = 0B010111;
- 심볼릭 상수(symbolic constant)
: 심볼릭 상수는 변수처럼 이름 가진 상수
심볼릭 상수는 선언과 동시에 반드시 초기화 해야함
매크로를 이용하거나, const 키워드를 사용하여 선언 가능
매크로 이용하는 것은 c언어의 문법이라, c++에서는 가급적 const 키워드 사용하여 선언하기
- 예제
=> const 키워드 사용한 상수는 선언과 함께 반드시 초기화!const int ages = 30;
- 장점
- 상수의 타입 명시적으로 지정가능
- 구조체와 같은 복잡한 사용자 정의 타입에도 사용 가능
- 해당 심볼릭 상수를 특정 함수나 파일에서만 사용할 수 있도록 제한가능
3. 기본 타입
: 타입(data type)이란 해당 데이터가 메모리에 어떻게 저장되고, 프로그램에서 어떻게 처리되어야 하는지를 명시적으로 알려주는 역할을 함. c++에서는 정수형,실수형,문자형,bool형의 기본 타입을 제공함
1) 정수형 타입
: 정수란 부호를 가지고 있고, 소수 부분이 없는 수를 의미
정수형 데이터에 unsigned 키워드를 추가하면, 부호를 나타내는 최상위 비트까지도 크기를 나타내는데 사용 가능
unsigned로는 음의 정수는 표현할 수 없지만, 0을 포함한 양의 정수는 두배 더 많이 표현 가능
음의 정수는 signed 키워드를 사용해서 나타낼 수 없고, signed 키워드를 생략해도 같은 뜻임
+) 최상위 비트(MSB, Most Significant Bit)는 1바이트를 구성하는 8개의 비트 중 최고값을 갖는 비트를 의미
정수형 타입 | 할당되는 메모리의 크기 | 데이터의 표현 범위 |
---|---|---|
(signed) short | 2 바이트 | -2^15 ~ (2^15 - 1) |
unsigned short | 2 바이트 | 0 ~ (2^16 - 1) |
(signed) int | 4 바이트 | -2^31 ~ (2^31 - 1) |
unsigned int | 4 바이트 | 0 ~ (2^32 - 1) |
(signed) long | 4 바이트 | -2^31 ~ (2^31 - 1) |
unsigned long | 4 바이트 | 0 ~ (2^32 - 1) |
unsigned long long | 8 바이트 | 0 ~ (2^64 - 1) |
=> 타입이 표현할 수 있는 범위를 벗어난 데이터를 저장하면 오버플로우가 발생해 전혀 다른값이 저장될 수 있음
+) 오버플롯우 (overflow)
: 해당 타입이 표현할 수 있는 범위를 넘어서는
4. 부동 소수점 수
5. 타입 변환
'프로그래밍 언어 > C++' 카테고리의 다른 글
[c++] 시작 (0) | 2022.09.01 |
---|---|
[c++] c++을 시작하며 (0) | 2022.09.01 |