전체 글 131

#20. 유의사항

1. 변수의 유효범위 *전역변수 int hp = 10; *지역변수 { } 중괄호의 범위 => 변수의 생존 범위 => 같은 이름을 두 번 사용할 때. 2. 연산 우선순위 => 정확하지 않다면 ( ) 를 붙이자. ex) 짝수 여부 bool IsEven = ( (hp % 2) == 0 ); ex) 짝수 거나 3으로 나뉘는 값인지 bool isEvenOrDivBy3 = ( (hp % 2) == 0 || (hp % 3) == 0) ; 3. 타입 변환 => 바구니 교체 => 윗쪽 비트 데이터가 짤린 상태로 저장. int hp = 77777; short hp2 = (short)hp; float hp3 = (float)hp; // 실수로 변환할 때 정밀도 차이가 있기 때문에 데이터 손실 unsigned int hp4 ..

프로그래밍/C++ 2022.07.17

#19. const, define

*const => 상수화 : 어떤 값을 수정할 수 없는 데이터로 만든다. => '읽기' 만 가능한 데이터. ex) "Hello world", const int t = 1; => 해당 내용을 수정하려하면 컴파일러가 오류 보고. const int AIR = 0; const int STUN = 1; const int POLYMORPH = 2; const int INVINCIBLE = 3; => const 지정 시, 반드시 초기화 해주어야 함. *#define #define Test 1 => '전처리기' => 선언된 문자를 지정한 문자로 대체한다는 개념. *const 변수는 무조건 메모리 할당되어지는가 ?? => const 가 전역으로 정의되어지면 #define 과 같이 대체되는 개념으로 &B 주소는 존재하지 ..

프로그래밍/C++ 2022.07.17

#19. static 정적변수

*정적 멤버 데이터 => 객체를 만들지 않아도 프로세스 시작할 때 미리 생성. => 해당 범위 내에 인스턴스가 하나만 생성. 즉, 클래스마다 생성되지 않음. => 초기화는 클래스 외부에서 해주어야함. ( 필드 초기화 사용 불가 ) class Player { public: static const int Num = 50; const int Num2 = 40; int Item[Num]; int Item[Num2]; => 불가. }; * const 변수로 배열 크기를 지정할 수 없는 이유. 정의 시점이 다름. 지금 상황의 const int 는 클래스가 정의된 이후 40 이란 값으로 초기화됨. 근데 Player 클래스를 선언하는 상황에서 Num2 라는 상수 변수는 존재하지 않음. 따라서, 아직 값이 정해지지도 않..

프로그래밍/C++ 2022.07.17

#18. 비트 연산과 비트 플래그

*비트 연산 => 비트 단위의 조작이 필요할 때. ~ => bitwise not 단일 숫자의 모든 비트를 대상으로, 0 -> 1 , 1 -> 0 으로 뒤집는 것. & => bitwise and 두 숫자의 모든 비트 쌍을 대상으로, and 를 한다. | => bitwise or 두 숫자의 모든 비트 쌍을 대상으로, or 를 한다. ^ => bitwise xor 두 숫자의 모든 비트 쌍을 대상으로, xor 를 한다. int a = 1; int b = 123; a = a ^ b; a = a ^ b; => 다시 a = 1 이 됨. *시프트연산 https://docs.microsoft.com/ko-kr/cpp/cpp/left-shift-and-right-shift-operators-input-and-output?..

프로그래밍/C++ 2022.07.16

#17. 비교 연산과 논리 연산

*비교 연산 ex) 체력 = 0 => 사망 경험치가 100 이상이면 레벨업 int a = 1; int b = 2; bool IsSame = false; bool IsDifferent = false; bool IsGreater = false; bool IsSmaller = false; IsSame = (a == b); IsDifferent = (a != b); IsGreater = (a > b); IsSmaller = (a < b); *논리연산 ex) 로그인할 때 아이디도 같고 AND 비밀번호도 같아야 한다. 길드마스터이거나 OR 운영자 계정이면 길드 해산 가능 // ! not test = !IsSame; // && test = (hp 0 || IsInvincible == true); // 살아있는 상태 ..

프로그래밍/C++ 2022.07.16

#16. 산술 연산

*산술 연산자 => 대입연산 / 사칙연산 https://ko.wikipedia.org/wiki/%EC%82%B0%EC%88%A0 *대입 연산 * a 에 b 를 대입하고 b 를 반환하라 !! a = b; a = b = 3; => a = ( b = 3 ); *사칙연산 => ex) 데미지계산, ....등 a++; // add eax, 1 = inc eax *곱셈의 우선순위가 높다. * ++a / a++ 차이점 *어셈블리로 코드 보기 b = a++ b = ++a 가 다르다는 것을 어셈블리 코드로 확인할 수 있다. 본 내용은 인프런의 루키스님 강의를 듣고 정리한 내용입니다. 강의 듣기 !!

프로그래밍/C++ 2022.07.16

#15. UTF & ASCII

*char => 정수지만 '문자' 의미를 나타내기 위해 사용 char : 알파벳 / 숫자 문자를 나타냄. wchar_t : 유니코드 문자를 나타냄. ASCII ( American Standard Code for Information Interchange ) char ch = 97; char ch = 'a' char ch 2 = '1' '유니코드' ( unicode ) => 전 세계 모든 문자에 대해 유일 코드를 부여한 것 => 유니코드에서 가장 많은 번호를 차지하는게 한국어/중국어~ (뚥쿩웱) => 유니코드는 표기 방식이 여러가지가 있는데 대표적으로 UTF8 / UTF16 *UTF8 => 알파벳, 숫자 1바이트 ( ASCII 동일한 번호 ) => 유럽 지역의 문자는 2바이트 => 한글, 한자 등 3바이트..

프로그래밍/C++ 2022.07.16

#14. 부동소수점 & boolean

*참 / 거짓 ( boolean ) *bool 은 그냥 1바이트 정수에 불과 *어셈블리에서 bool 이란 것은 없음. *C++ 은 어셈블리보다 좀 더 높은 언어, '가독성' *왜 bool 1byte 로 잡았을까 ?? => 메모리의 최소단위가 1바이트 이기 때문 *실수 ( 부동소수점 ) '부동 소수점은 항상 근사값' 이라는 것을 알아야함. 특히 수가 커질수록 오차 범위도 매우 커짐 ex) 1/3 = 0.33333333333333333333333333333333333.... *실수 2개를 == 으로 비교하는 것은 지양 *float (4byte) / double (8byte) *고정소수점 => 점 앞/뒤를 기준으로 16/16씩 끊으면 ?? => 너무 작다. *부동소수점 => . 을 유동적으로 움직여서 표현하는..

프로그래밍/C++ 2022.07.16

#13. 정수

* '정수' 에 대해 알아보자. char a; // 1바이트 short b; // 2바이트 int c; // 4바이트 __int64 d; // 8바이트 (long long) signed char a; // 1바이트 signed short b; // 2바이트 signed int c; // 4바이트 signed __int64 d; // 8바이트 (long long) signed : 음수를 포함 => signed 를 생략하고 있다. unsigned : 음수를 포함하지 않음 signed char a; // 1바이트 (-128 ~ 127) signed short b; // 2바이트 (-32768 ~ 32767) signed int c; // 4바이트 ... signed __int64 d; // 8바이트 (long..

프로그래밍/C++ 2022.07.16

#12. 스택 메모리 & 스택 프레임 ( Stack Frame )

*스택 메모리 => 스택 메모리의 주소는 '높은주소' 부터 시작 * 스택 프레임 => 함수에 대한 지역 변수와 매개변수를 일시적으로 보유하는 스택 메모리 영역 https://docs.microsoft.com/ko-kr/cpp/mfc/memory-management-frame-allocation?view=msvc-170 => bp ( base pointer ) 와 sp ( stack pointer )를 기준으로 해당 함수가 스택 메모리에서 사용할 영역을 지정한다. bp 와 sp 는 레지스터의 한 종류. ( = 링크 ) *포인터 레지스터 ip ( Instruction Pointer ) : 다음 수행 명령어의 위치 => 'Code 영역에 해당하는 줄 위치' sp ( Stack Pointer ) : 현재 '스택..

프로그래밍/C++ 2022.07.15