[C++] 변수 & 상수

꿈별·2022년 6월 16일
0

C++

목록 보기
2/27

✔변수 Variable

  • 값이 변할 수 있다.

  • 데이터를 저장할 수 있는 메모리 공간에 붙여진 이름으로, 이 이름을 통해 해당 메모리 공간에 접근할 수 있다.

  • 변수 이름 생성 규칙
    • 영문 대소문자, 숫자, 언더스코어(_)로만 구성됨
    • 숫자로 시작될 수 없음
    • 공백 포함 불가능
    • C++에서 미리 정의된 키워드 사용 불가능
    • 변수명 길이 제한 없음

자료형 Data Type

  • 특성
    signed : 부호를 가질 수 있다.
    unsigned : 부호를 가질 수 없다.
    자료형은 기본적으로 signed

  • 예시

    • char
      문자, 1byte(8bit, 2^8), -128 ~ 127 (unsigned char : 0~255)

    • short (요즘은 잘 안씀)
      정수, 2byte(16bit, 2^16), -32768 ~ 32767

    • int
      정수, 4byte, -2147483648 ~ 2147483647

    • __int64
      정수, 8byte, 넓은 범위

    • float
      실수, 4byte

    • double
      실수, 8byte

    • bool
      참/거짓, 1byte, false(0) ~ true(1)
      0은 false, 0이 아닌 모든 수는 true이다.

  • bit(비트) : 용량의 최소 단위
    1bit는 0 or 1 중 하나만 저장할 수 있다.

  • 1byte = 8bit
    n비트가 증가하면 메모리 저장 공간이 2^n씩 증가한다.
    1kbyte : 1024byte
    1mbyte : 1024kbyte
    1gbyte : 1024mbyte
    1tbyte : 1024gbyte

변수의 메모리

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

  • 메모리 주소 : 메모리 공간에서 자신(변수)의 정확한 위치를 알기 위한 고유 주소

  • 맨 앞 비트
    메모리에 할당된 정수형 변수의 제일 첫 번째 비트는 변수의 부호를 나타낸다.
    부호 비트는 singed 자료형일 때만 의미있다.
    unsigned 자료형일 때는 맨 앞 비트도 데이터값으로 채운다.


변수 선언, 정의, 할당, 초기화

구분이 헷갈린다 ....

  • 선언 declaration
    : 변수를 사용하기 위해 컴파일러에게 이름과 타입을 알려주는 것

  • 정의 definition

  • 할당 assignment
    : = (대입 연산자)를 사용하여 (선언)정의된 변수에 실제로 값을 입력하는 것

  • 초기화 initialization
    : 변수를 선언하는 동시에 값을 할당해주는 것
    -> 할당하지 않은 변수에는 쓰레기값이 들어있기 때문에 처음에 초기화해주는 것이 좋다.

// 선언이자 정의
int num;

// 할당
num = 20;

// 초기화
double num2 = 1.23;

✔상수

  • 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간이지만,
    프로그램이 실행되는 동안 메모리에 저장된 데이터를 변경할 수 없다는 차이가 있다.

  • 리터럴 상수 / 심볼릭 상수로 나뉜다.

    차이점) 리터럴 : 데이터 그대로 사용 / 심볼릭 : 데이터에 이름을 지어 그 이름으로 상수를 사용

리터럴 상수

  • 코드에 직접 삽입된 값으로, 상수값 자체를 변경할 수 없다.

    int age=23; 에서 변수 'age'는 메모리 공간을 가리키지만 '23'은 그렇지 않음,
    또한 'age'에 23 말고 새로운 값을 초기화할(넣을) 수는 있지만 '23'을 변경할 수는 없음

  • 변수와는 달리 저장된 메모리 공간을 가리키는 이름을 가지고 있지 않다.

  • 정수형 리터럴 상수 / 실수형 리터럴 상수 / 문자형 리터럴 상수로 나뉜다. +부울 리터럴

    • 정수형 리터럴 상수 : 123, -456과 같이 아라비아 숫자와 부호로 표현된다.

    • 실수형 리터럴 상수는 3.14, -45.6과 같이 소수 부분을 가지는 아라비아 숫자로 표현된다.

    • 문자형 리터럴 상수는 'a', 'Z'와 같이 따옴표로 감싸진 문자로 표현된다.

bool Check = true; // 부울 변수 'Check'은 부울 리터럴 true가 할당됨
int x = 5; //정수 변수 'x'는 정수 리터럴 5가 할당됨 
std::cout<< 2*3; // 여기서 2와 3은 정수 리터럴임

정수형 리터럴 상수

  • C++에서는 정수형 상수를 10진수뿐만 아니라 8진수나 16진수로도 표현할 수 있다.

  • 여러 진법으로 표현된 상수의 출력을 위해 cout 객체는
    dec(10진수), hex(16진수), oct(8진수) 조정자를 제공한다.

  • 세 가지 조정자를 cout 객체에 전달하면 사용자가 다시 변경하기 전까지
    출력되는 진법의 형태를 계속 유지할 수 있다.

int a = 10;

//10진수가 디폴트라 따로 변환 안 함
cout << "숫자 10을 10진수로 표현 : " << a << endl;

cout << oct;
cout << "숫자 10을 8진수로 표현 : " << a << endl;

cout << hex;
cout << "숫자 10을 16진수로 표현 : " << a;

정수형 리터럴 상수 타입

  • 아래의 두 경우를 제외하면 모두 int형으로 저장된다.
  1. 데이터의 값이 너무 커서 int형으로 저장할 수 없는 경우

  2. 정수형 상수에 접미사를 사용해서 해당 상수의 타입을 직접 명시하는 경우

  • C++에서는 접미사를 상수의 끝에 추가해서 해당 상수의 타입을 직접 명시할 수 있다.
  1. 데이터의 값이 너무 커서 int형으로 저장할 수 없는 경우

  2. 정수형 상수에 접미사를 사용해서 해당 상수의 타입을 직접 명시하는 경우

접미사타입
기본 설정(singed) int형
u 또는 Uunsinged int형
l 또는 L(singed) long형
ll 또는 LLlong long형
ul 또는 uL 또는 Ul 또는 ULunsinged long형
long long 또는 ull 또는 Ull 또는 uLL 또는 ULLunsinged long형 (C++ 11부터 제공)

실수형 리터럴 상수 타입

  • C++에서 실수형 리터럴 상수는 모두 부동소수점 방식으로 저장된다.

  • 모두 double형으로 저장되며, 접미사를 추가해서 저장되는 타입을 직접 명시할 수 있다.

  • 부동소수점 숫자 리터럴을 사용할 때는 정수값과 구분할 수 있도록
    소수점 이하 자리를 포함하는 것이 일반적이다.

접미사타입
기본 설정float형
f 또는 Fdouble형
l 또는 Llong double형
//부동 소수점 리터럴 선언 방법 두 가지
double pi = 3.14159; //3.14159는 double 리터럴
double avogadro = 6.02e213; // avogadro의 수는 6.02x10^23
//이 때 두 번째 형식에서 지수 뒤의 숫자가 음수일 수도 있다.
double electron = 1.6e-19; // 1.6 x 10^-19

리터럴 상수 접미사 사용 예시

unsigned int nValue = 5u // unsigned int
long nValue2 = 5L; //long
float fValue = 5.0f; // float
double d = 6.02e23 // double
char c = 'A'; // 'A' : 문자 리터럴
std::cout << "Hello, world!" // "Hello, world" : 문자열 리터럴

포인터 리터럴 상수 타입

  • 널 포인터 : 아무것도 가리키고 있지 않은 포인트

  • C++ 11부터는 널 포인터를 표현하기 위해 포인터를 0으로 초기화할 필요 없이
    nullptr 키워드를 통해 더 제대로 널 포인터를 표현할 수 있게 되었다.

  • nullptr 키워드를 사용한 리터럴 상수의 타입은 포인터 타입이며,
    정수형으로 변환할 수 없다.


심볼릭 상수

  • 변수와 마찬가지로 이름을 가지고 있는 상수

  • 직관적으로 이해할 수 없는 상수에 이름을 붙여 코드 이해도를 높인다.
    (주석을 달 수도 있지만 그 수가 많아지면 지저분해질 수 있다.)

  • 선언과 동시에 반드시 초기화해야 한다.

  • const 키워드를 사용해 선언하면 이후 코드에서 해당 변수를 다른 상수로 바꿀 수 없게 한다.

//바로 이해 안 되는 코드
int candle = 23; //왜 23이지?

//const 키워드 사용
const int AGE = 23;
int candle = AGE; //초 갯수는 나이만큼 ~


참고)
http://www.tcpschool.com/cpp/cpp_datatype_constant
https://boycoding.tistory.com/152?category=1007180
https://needs-searcher.tistory.com/140
새싹 수업

0개의 댓글