C++ lecture section2 [1/2]
여기서부터는 C++로 진행
정수
변수 선언은 [타입] [이름];
혹은 [타입] [이름] = [초기값];
으로 함
함수 외부에 변수 선언시 0이 아닌 초기화 값이 있으면 data
영역, 초기값이 0이거나 없다면 bss
영역에 저장됨
char
: 1바이트,short
: 2바이트,int
: 4바이트,long long(__int64)
: 8바이트- 기본적으로는
signed
가 생략되어있으며,unsigned
로 설정시 최상위비트를 항상 1로 고정하여 양수만 나타냄 - 이론적으로 양수만 존재할 수 있는 데이터의 경우
unsigned
를 선택할지 말지의 여부는 스타일에 따라 다를 수 있음 - 필요 메모리에 따라 데이터형의 크기를 잘 선택해야함
- 데이터형의 범위를 넘어갈경우 오버플로우와 언더플로우가 발생할 수 있으므로 유의
불리언과 부동소수점
불리언(boolean) : 참(true) 또는 거짓(false)만을 나타내는 자료형
- 사실은 1바이트 정수에 불과함
- 단,
bool
이라는 키워드 만으로도 참/거짓 둘중 하나라는 것을 알 수 있기 때문에 가독성이 뛰어남
실수(부동소수점) : float
, double
형이 있음
- 실수는 기본적으로
double
형으로 지정 - 유효숫자와 지수를 사용한 정규화로 표현
float
: 4바이트, 부호(1비트) + 지수(8비트) + 유효숫자(23비트)double
: 8바이트, 부호(1비트) + 지수(11비트) + 유효숫자(52비트)
-3.375를 저장할 경우
- 2진수로 변환 : 3.375 = 3 + 0.375 = 0b11 + 0b0.011
- 3 = 2 * 1 + 1 * 1 -> 0b11
- 0.375 = 0.5 * 0 + 0.25 * 1 + 0.125 * 1 -> 0b0.011
- 정규화 : 0b1.1011 * 2^1
- 1(부호), 1(지수), 1011(유효숫자)
- 단, 지수는
unsigned byte
라고 가정하고 숫자 + 127로 만들어줌
- 결과 : 0b 1(1) 10000000(8) 1011000’0000’0000’0000’0000(23)
프로그래밍시 부동소수점은 항상 근삿값임
특히 수가 커질수록 오차 범위가 매우 커지며, 실수 2개를 ==
으로 비교하는 것은 지양해야함
문자와 문자열
char
: 정수형 1바이트지만 문자의 의미를 나타내기 위해 사용
ASCII
코드를 사용함- 문자의 의미로 작은따옴표
''
사용
wchar_t
: 유니코드 문자를 나타냄
- 유니코드(unicode) : 전 세계 모든 문자에 대해 유일 코드를 부여한 것
- 유니코드는 표기 방식에 따라 종류가 여러가지가 있으며, 대표적으로
UTF8
,UTF16
이 있음UTF8
: 알파벳과 숫자는 1바이트, 유럽 지역 문자는 2바이트, 한글 / 한자 등은 3바이트UTF16
: 거의 대부분의 문자가 2바이트, 매우 예외적인 문자만 4바이트
- 유니코드 문자를 지정할때는
L'안'
과 같이 앞에 L을 붙인 형식을 사용함 - 단, 출력하기 위해서는
wcout.imbue(locale("kor"));
설정 후wcout
을 사용해야함
Escape Sequence : 표기하기 애매한 것들을 표현
\t
,\n
등'
등의 문자를 사용하고 싶을 때도 사용함
문자열 : 문자들이 열을 지어서 모여있는 것
- 문자열의 끝은
NULL
=\0
으로 인식함 - 일반적으로는
""
를 사용하여 만들며, 이 경우 마지막에NULL
값이 자동으로 붙음