불리언
bool타입은 참과 거짓을 나타내는 1바이트 정수이다.
일반적으로 참과 거짓을 정수를 사용하지 않고 bool타입을 사용하는 이유는
가독성적인 이유가 크다.
bool타입만 봐도 이것이 참과 거짓 둘 중 하나라는 것을 바로 알 수 있기 때문에
가독성적인 측면에서 bool타입을 사용한다.
C++ 선언 시 아래와 같은 형식을 사용한다.
bool [변수 이름] = [true or false];
부동소수점
부동소수점은 쉽게 말해 실수를 말한다.
부동소수점이란 단어만 보고 소수점이 고정된 상태를 상상하기 쉬운데 사실 정반대이다.
즉, 소수점을 유동적으로 움직여서 실수를 표현하는 방법이 부동소수점이다.
소수점을 유동적으로 움직여야만 하는 이유는 실수를 컴퓨터에서 효율적으로 표현하기 위해서이다.
예를 들어 3.141592와 같은 파이값이 있다고 하면
10진수를 기준으로 정규화를 시켜준다고 생각하면 0.3141592 * 10 이렇게 된다.
(실제로 컴퓨터에선 2진수로 변환해서 정규화가 진행된다)
정규화된 값을 3141592(유효숫자) 1(지수)로 구분한다.
C++에서 실수를 표현하는 타입은 총 두 가지인데 float, double이 있다.
이 비트단위로 자세히 표현하면 아래와 같다.
float : 부호(1비트), 지수(8비트), 유효숫자(23비트) -> 총합 32비트 = 4바이트
double : 부호(1비트), 지수(11비트), 유효숫자(52비트) -> 총합 64비트 = 8바이트
이렇게 실수를 정규화시켜주고 해당 유효숫자와 지수를 통해 표현한다.
참고로 C++에서 float 타입에 실수를 저장할 때는 아래와 같이 선언한다.
float [변수명] = [실수값f];
- ex) float a = 0.4f; -> 기본적으로 실수 값을 저장하면 float 타입이라고 선언해도 double로 저장된다. 그렇기 때문에 실수 값 뒤에 f를 붙여서 float로 저장하겠다는 뜻이다.
double은 그냥 저장하면 된다.
double [변수명] = [실수 값];
부동소수점은 위와 같이 정수에 비해 복잡하고 까다로운데
기억해야 할 가장 중요한 요소는 항상 '근사값'이라는 점이다.
즉, 정확하게 해당 실수를 표현할 수 없다. 최대한 근사한 값을 표현할 뿐이다.
특히 수가 커질수록 오차 범위도 기하급수적으로 커진다.
문자
C++에서 아래와 같은 타입으로 문자를 표현한다.
char : 알파벳, 숫자, 문자를 나타낸다.
wchar_t : 유니코드 문자를 나타낸다.
char ch = 'a'; // '문자'의 의미로 작은따옴표 '' 사용
char ch1 = '1'; // 1이라는 숫자가 아닌 문자가 저장됨
char ch2 = 'a' + 1; // 결과는 문자 b가 출력된다.
위에 각 문자들은 고유의 숫자를 가지고 있으며 이를 표준으로 정의한 것이
아스키코드표이다. ASCII(American Standard Code for Information Interchange)
하지만 국제화 시대에 영어만으로 서비스하는 데는 한계가 있다.
그래서 나온 것이 유니코드이다.
유니코드는 전 세계 모든 문자에 대해 유일 코드를 부여한 것이다.
유니코드는 표기 방식이 여러 가지가 있는데 대표적으로 UTF8과 UTF16이 있다.
UTF8
알파벳과 숫자는 1바이트로 표현하고 아스키코드와 동일한 번호를 사용한다.
유럽 지역의 문자는 2바이트로 표현한다.
한글, 한자 등은 3바이트로 표현한다.
UTF16
알파벳, 숫자, 한글, 한자 등 거의 대부분을 2바이트로 표현한다.
문자열
문자들이 열을 지어서 모여있는 것을 말한다.
C 계열 언어에서는 문자열 끝에 널문자(\0)를 붙여서 문자열이 끝났다는 것을 표현한다.
만약 문자열 끝에 NULL이 없다면 메모리 상에서 문자열 이후의 값들도 의도치 않게
유출될 수 있다.(보안상 문제가 될 수 있음)
char str[] = "Hello World";
위와 같이 큰따옴표로 문자들을 묶어서 표현하게 되며 NULL은 우리 눈에만 안 보일뿐
자동적으로 문자열 끝에 입력되어 있다. 실제로 Hello World라는 문자열은 우리가 보기에
띄어쓰기까지 포함해서 총 11글자이지만 컴퓨터에서는 우리 눈에 보이지 않는
NULL문자까지 포함해서 12글자라고 인식한다.