수업기록

실수

실수를 저장하는 방식은 float, double, long double을 사용.
float이 double보다 자주 사용하는 이유는 연산에 사용하는 비트 자릿수가 더 적기 때문에
연산 속도가 조금더 빠르다.

컴파일러는 실수값은 보통 double형으로 인식한다. 정수값은 int형으로
-> 그렇기에 3.14f와 같이 뒤에 f를 붙이는 것.

동일한 값이 반복되어지는 소수 3.33333333과 같은 경우에는 그냥 3.3으로 표시.
게임을 하는 경우에는 float연산을 쓰는 경우가 매우 잦음 
(단차를 줄이기 위해 : 안티앨리어싱과 유사)

그렇기에 int 연산에 특화되어있는 cpu는 실수 연산을 할때 모드 전환을 하게 된다. 
그렇기에!! GPU를 통해서 실수 연산을 처리하는 것.


문자
char(1바이트)과 wchar_t(2바이트)
C++ 에서는 스트링은 컨테이너고 자료형이 아니다. 

SBCS(single byte character set) 시절에는 영어만 사용했기 때문에 당시에는 1바이트짜리 char를 사용했으나
언어가 다양해지면서 2바이트(wchar_t) 정도는 되어야 다양한 언어를 아스키 코드에 대응할 수 있게 됨

wchar_t는 유니코드 기반 자료형 MBCS(multi byte character set) 아스키코드와 유니코드를 혼용해서 쓰게 되는 것임.
-> 혼용하지 말고 다같이 통일하자! -> WBCS(wide) 

논리형
bool은 1바이트. 값의 유무를 판단하기 위한 용도, 0은 거짓 0외의 값은 참.
bool bChoice = 100 이라면 1이 됨.

__int16 / __int 32 . __int64 => short int  longlong 을 이렇게 표시하기도 함.

사칙연산 + 나머지 연산자

sizeof 자료형의 크기를 계산해주는 연산자.
char cTmp = 'a';
char cDest = ' b';

 sizeof(cTmp + cDest) 하게 되면 4바이트 나옴, 왜? 
 -> cTmp + cDest는 연산이 진행되고 난 후에는, 리터럴 상수 n이 되어버림. 리터럴 상수는 
 int로 판단하기 때문임

 대입 연산자 = 에서 기억해야할 것.
우항이 완료되면 좌항으로 이어진다.


L-value와 R-vlaue;
int iData = 100;
R-Value = 연산자 기준으로 오른쪽에 위치할 수 있는 데이터 타입 ( 리터럴 상수)
L-Value = 좌항과 우항 모두 위치할 수 있는 데이터 타입.

 L-value는 &를 붙일 수 있다면 Lvalue다. 참조 연산자

 nan = not a number 디버깅 중 연산 중에 이상한 것이 들어가서는 안될 것이 들어갔다는 뜻

관계 연산자. ,>=,==,!=,<,>

 논리연산자, 
 AND && OR || NOT ! 

 *not 연산자는 C언어 시절과 C++ 시절 코드를 혼용하기 위해서 사용하기도 함.
    

비트 연산자 : 정수 자료형만 사용함.

& and   - 같은 위치의 비트끼리 연산하여 둘다 참일 때만 1 (둘다 1일때만 1)
| or    - 같은 위치의 비트끼리 연산하여 둘 중 하나라도 참이라면 1 (하나라도 1)
~ not   - 0을 1로, 1을 0으로
^ xor   - 같은 위치의 비트끼리 연산하여 둘이 서로 같지 않을 경우에만 참.(01 or 10) 
 -자기 자신끼리 xor로 하면 모두가 0이됨. 대량의 데이터를 0으로 되돌릴 때 사용할 수 있음.

만약 10을 이진수로 한다면 0000 1010 임. 만약 13을 이진수로 한다면 0000 1101 임.

2의 보수! 컴퓨터가 음수를 만들어내는 원리!

   10의 not 0000 1010 임.
   -11dms   1111 0101 임

   두개를 더하면 -1
   1111 1111 이 됨.

   거기에 1을 더하면 0이됨!

오늘의 숙제 : 20부터 30까지 손으로 2진수. soen.kr