SB_J00N 2023. 7. 27. 16:25
#include <iostream>
using namespace std;

int hp = 100; 


char a; //1바이트 -128 ~ 127
short b; //2바이트 -32768 ~ 32767
int c; //4바이트 -21.4억 ~ 21.4억
__int64 d; //8바이트  : 어마어마하게큼

//bool : 1바이트 언어

//float 부호 1비트, 지수 8, 유효숫자 23 = 32비트 = 4바이트
//double 부호 1, 지수 11, 유효숫자 52 = 64비트 = 8바이트

//ex -3.375라는 값을 저장
// 1) 2진수 변환 = 3 + 0.375 = 0b11 + 0b0.011 = 0b11.011
//0.375 = 0.5*0 + 0.25*1 + 0.125*1 = 0b0.011 
// 2) 정규화 0b1.1011 * 2^1
// 부호 1, 지수1, 유효숫자 1011
//단 지수는 unsigned byte라고 가정하고 숫자+127을 만들어줌
// 예상결과 : 0b 1 1000000 1011000 0000 0000 0000 0000

// 프로그래밍 할 때 부동소수점은 항상 '근사값'이라는 것을 기억
// 1/3 = 0.333333333333333333333333..... 인것처럼
//특히 수가 커질 수록 오차 범위도 매우 커짐
//실수 2개를 단순하게 == 으로 비교하는 것은 지양(매우 위험)


// char : 정수지만 '문자의 의미를 나타내기 위해 사용
// char : 알파벳 .숫자, 문자를 나타낸다
// wchar_t : 유니코드 문자를 나타낸다

// ASCII ( American Standard code for information interchange)

// '문자'의 의미로 작은 따옴표 '' 사용, 
//97이 아니라 97에 해당하는 아스키코드가 저장됨.


char ch = 'a';
char ch2 = '97';

// 전 세계 모든 문자에 대해 유일 코드를 부여한 것이 유니콛,

//표기 방법 대표적으로 UTF8, UTF16
// UTF8 
// 알파벳, 숫자 1 바이트 ( 아스키하고 동일한 번호)
// 유럽 지역의 문자는 2바이트
// 한글, 한자등 3바이트

// UTF16
// c#, 마이크로소포트에서 자주사용
// 알파벳, 숫자. 한글. 한자등 거의 대부분이 문자 2바이트
// 매~~~~~우 예외적인 고대 문자만 4바이트(사실앙 무시해도 됨)

wchar_t wch = L'안';


// Escape Sequence
// 표기하기 애매한 것들을 표현
// \0 = 아스키코드 0번 = null
// \w = 아스키코드 9번 = Tab
// \n = 아스키코드 10번 : LineFeed(한줄아래로)
// \r 아스키코드 13번 : CarriageReturn (커서 << )
// \' : ' cout할때 사용 등등....


// C스타일의 문자열
// 문자들이 열을 지어서 모여 있는 것
// 정수(1~8바이트) 고정 길이로
// \00이 마지막에 들어가있어서 끝으로 인정 (끝은 Null (0) )


//data 영역에서 대부분의 data는 0으로 초기화되있어서 문제가 보통 안일어남
char str[] = { 'h', 'e', 'l', 'l', 'o' };
//큰 따음표를 사용해서 자동으로 null까지 추가
char str2[] = "Hello World";


//stack 메모리에서 str[]그대로 사용하면 null값 없어서 0나올때까지 메모리 뒤지면서 출력 : 이상하게 나옴

int main()
{
    char str[] = { 'h', 'e', 'l', 'l', 'o', '\0'};
    //count : char 전용, wcout따로 사용
    //심지어 한글 사용을원하면
    wcout.imbue(locale("kor"));
    wcout << wch << endl;
    cout << "체력이" << hp << "남았습니다" << endl;
}


// 데이터 연산

//a라는 이름의 바구니를 할당 후, 1을 너는다.
int a = 1;