프로그래밍 언어/C++

[c++] 타입

말하는 알감자 2022. 9. 2. 10:55

타입


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) 변수 선언

: 변수 사용전 변수를 저장하기 위한 메모리 공간 할당받아야함
이런 행위를 변수의 선언이라 부름

  1. 변수 선언만 하기
    : 변수를 선언하여 메모리 공간 할당 받고, 나중에 변수 초기화
    변수 초기화 안해서 해당 메모리 공간에는 쓰레기 값이 들어있음
    프린트 하면 이상한 값 나옴

    • 문법

      타입 변수이름;
    • 예제

          int num;
         num = 20;
  2. 만약 선언한 데이터 타입과 다른 타입을 저장할 경우, 저장된 데이터에 변형이 일어날 수 있으니 주의!

  3. 변수 선언과 동시에 초기화하기
    : 변수 선언과 동시에 그 값 초기화 가능
    선언하고자 하는 변수들의 탕비이 같다면 동시에 선언 가능

    • 문법
    • 1. 타입 변수이름1, 변수이름2; 2. 타입 변수이름3 = 초깃값, 변수이름4 = 초깃값;
    • 예제
    • int num1,num2; double num3 = 1.23,num4 = 4.56;선언하고자 하는 변수 타입 서로 다르면 동시 선언 불가

2. 상수

1) 상수 (constant)

: 변수와 마찬가지로 데이터를 저장할 수 있는 메모리 공간을 의미
변수와의 차이점은 프로그램이 실행되는 동안 메모리에 저장된 데이터가 변경 불가

2) 표현 방식에 따른 상수

  1. 리터럴 상수 (literal constant)
    : 변수와 달리 데이터가 저장된 메모리 공간을 가르키는 이름이 없음
    1) 정수형 리터럴 상수
    : 아라비아 숫자와 부호로 직접 표현됨
    ex) 123,-456
    2) 실수형 리터럴 상수
    : 소수 부분을 가지는 아라비아 숫자로 표현됨
    ex) 3.14,-45.6
    3) 문자형 리터럴 상수
    : 따옴표('')로 감싸진 문자로 표현됨
    ex) 'a','Z'

  2. 정수형 리터럴 상수
    : 아라비아 숫자와 부호로 직접 표현됨
    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형으로 저장됨

    1. 데이터 값이 너무 커서 int형으로 저장 불가
    2. 정수형 상수에 접미사를 사용해서 해당 상수의 타입을 직접 명시하는 경우
    3. 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형
  1. 실수형 리터럴 상수의 타입
    : c++에서 실수형 리터럴 상수는 모두 부동 소수점 방식으로 저장됨
    이러한 실수형 리터럴 상수는 모두 double형으로 저장됨
    접미사 추가해서 저장되는 타입 직접 명시도 가능

    • 접미사를 추가하여 나타낼 수 있는 실수형 타입

      접미사 타입
      f 또는 F float형
      기본 설정 double형
      l 또는 L long double형
    1. 포인터 리터럴 상수
      : 널 포인터(null pointer)란 아무것도 가리키고 있지 않은 포인터를 의미
      nullptr 키워드를 사용하여 널 포인터 표현 가능
      nullptr 키워드를 사용한 리터럴 상수의 타입은 포인터 타입이고, 정수형으로 변환 불가
      0을 사용해서 널 포인터 명시 가능 (nullptr == 0 은 true(참)을 반환)
      but nullptr 리터럴 상수 사용하는 것이 좀 더 안전한 프로그램 만들 수 있음
    2. 이진 리터럴 상수
      : 0B 또는 0b의 접두사와 0과 1의 시퀀스를 가지고 이진 리터럴 상수 표현 가능
    • 예제
       auto a = 0B010111;
    1. 심볼릭 상수(symbolic constant)
      : 심볼릭 상수는 변수처럼 이름 가진 상수
      심볼릭 상수는 선언과 동시에 반드시 초기화 해야함
      매크로를 이용하거나, const 키워드를 사용하여 선언 가능
      매크로 이용하는 것은 c언어의 문법이라, c++에서는 가급적 const 키워드 사용하여 선언하기
    • 예제
      => const 키워드 사용한 상수는 선언과 함께 반드시 초기화!
      const int ages = 30;
    • 장점
      1. 상수의 타입 명시적으로 지정가능
      2. 구조체와 같은 복잡한 사용자 정의 타입에도 사용 가능
      3. 해당 심볼릭 상수를 특정 함수나 파일에서만 사용할 수 있도록 제한가능

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