C++프로그래밍/C 와 C++ 기초실습 25

const와 메모리 구조

※ C / C++을 이미 알고 있으나 개인적인 공부 및 복습을 위해 포스팅 하는 글이므로C++에 대한 구체적인 정보를 담고 있지 않습니다. ▶ 하드코딩의 문제점 (상수때려박고 그런거) + const를 사용하는 이유 ㆍ 0b0000 [무적][변이][스턴][공중부양]                              ↓ ㆍ 0b0000 [무적][공포][변이][스턴][공중부양]  ㆍ 이렇게 사양이 변경되면 기존의 버전이 이상해질거다...   ㄴ 프로젝트가 클 수록 더 큰 문제가 발생할 것이다.. 따라서 리터럴상수를 저렇게 때려박는것은 좋지 않다.                             ↓ ㆍ 그래서 한번 정해지면 절대 바뀌지 않을 것을을 const키워드를 붙히자 ㆍ const를 사용하면 가독성도 ..

비트연산과 비트플래그

※ C / C++을 이미 알고 있으나 개인적인 공부 및 복습을 위해 포스팅 하는 글이므로C++에 대한 구체적인 정보를 담고 있지 않습니다.▶ 비트연산 - 언제 필요한가?  비트 단위의 조작이 필요할때. 대표적으로 비트플래그 ~  :  (bitwise not) ㆍ 단일 숫자의 모든 비트를 대상으로 0은 1, 1은 0으로 뒤바뀜 ㆍ 즉 모든 숫자를 반대로 (1 0) &  :  (bitwise and) ㆍ 두 비트가 둘다 1이면 1, 아니면 0  |  :  (bitwise or) ㆍ 비트 둘중 하나라도 1이면 1 아니면 0 ^  :  (bitwise xor) ※ 레지스터 공부할때 암호학에서 좋다한놈이다!ㆍ 두 숫자의 모든 비트쌍을 대상으로 xor을 한다.ㆍ 두 숫자가 같으면 0, 다르면 1 ㆍ 비트열을 N만큼..

비교연산과 논리연산 (디스어셈블리 디버그)

※ C / C++을 이미 알고 있으나 개인적인 공부 및 복습을 위해 포스팅 하는 글이므로C++에 대한 구체적인 정보를 담고 있지 않습니다. ㆍ 어셈블리때 공부했던 jmp... Jump문을 이용해 분기로 1이나 0을 반환하는 코드가 내부적으로 어셈블리를 통해 굴러가는걸 확인할 수 있다.  ㆍ 논리연산도 !하나 붙혀서 간단할줄 알았지만... 어셈블리에선 꽤나 복잡하다 더보기어셈블리로 디버그를 돌려보는 습관을 들이며 공부하면 꽤나 실력이 많이 늘 것 같다.

산술 연산(디스어셈블리 디버그 테스트)

※ C / C++을 이미 알고 있으나 개인적인 공부 및 복습을 위해 포스팅 하는 글이므로C++에 대한 구체적인 정보를 담고 있지 않습니다. ▶ 대입연산이니 산술연산이니... 기본 개념 스킵스킵 ㆍ 어셈블리를 배우고 어셈블리로 돌려 보니 새로운 경험을 하게 되는 것 같다. ㆍ 여러가지 궁금한 것들을 뭐가 더 효율적인지 눈으로 살펴볼 수 있다.   ※ 눈으로 보는 두 연산의 차이점ㆍ 다르다는건 알고있었다. 하지만 정확하게 알 수 있다. 1. b = a++ (후위 증가연산)    1)  mov eax, dword ptr [a]          ㆍ 메모리에서 변수 a의 값을 읽어와 레지스터 eax에 저장     2)  mov dword ptr [b], eax          ㆍ eax의 값을 변수 b에 저장....

문자와 문자열 (유니코드)

※ C / C++을 이미 알고 있으나 개인적인 공부 및 복습을 위해 포스팅 하는 글이므로C++에 대한 구체적인 정보를 담고 있지 않습니다.  ▶ 문자ㆍ  char : 알파벳 / 숫자 문자를 나타낸다 ㆍ  wchar_t : 유니코드 문자를 나타낸다#include using namespace std;// bool은 그냥 정수지만, 참 거짓을 나타내기 위해 사용한다// 사실char도 마찬가지, 그냥 정수지만 문자의 의미를 나타내기 위해 사용// char : 알파벳 / 숫자 문자를 나타낸다// wchar_t : 유니코드 문자를 나타낸다//ASCII 코드 (American Standard Code for Information Interchange)char ch = 97;//일반적으론 char ch = 'a'; 이..

bool과 부동소수점

※ C / C++을 이미 알고 있으나 개인적인 공부를 위해 포스팅 하는 글이므로C++에 대한 구체적인 정보를 담고 있지 않습니다. ▶ bool 불리언. ㆍ 참 /  거짓 ㆍ 사실 bool은 그냥 1바이트 정수에 불과하다.... 일리가 있는 말인게 아셈블리에서 bool이라는건 없다. ㆍ 그럼왜있지?? -> 가독성이 좋다int main(){ int man = 1; bool girl = false; if(man == 1) { // 어쩌구저쩌구 } if (girl == false) { // 어쩌구저쩌구 }}ㆍ 가독성의 차이가 크다 ㆍ bool은 1바이트 정수이다 (8bit)더보기음... 왜 굳이 1비트로 안하고 1byte로 잡았을까?? 우리가 어셈블..

정수

※ C / C++을 이미 알고 있으나 개인적인 공부를 위해 포스팅 하는 글이므로C++에 대한 구체적인 정보를 담고 있지 않습니다. ▶ 정수int main(){ int hp = 100; // 어셈블리에서 .data영역 int mp; // 어셈블리에서 .bss영역 return 0;}  #include using namespace std;int main(){ char a; // 1바이트 (-128 ~ 127) short b; // 2바이트 (-32768 ~ 32767) int c; // 4바이트 (-21.4억 ~ 21.4억) __int64 d; //(long long) 8바이트 (경을 넘어감... 샐줄모르겠음ㅋㅋ) // unsigned..

컴파일 과정과 전처리기

▶ 코드를 실행가능한 프로그램으로 컴파일하는 과정 ㆍ 크게 순서는 전처리기 -> 컴파일러 -> 어셈블러 -> 링커 순으로 진행된다 1. 전처리기 ㆍ include나 define 같은 전처리기 지시문을 처리한다. ㆍ 필요한 헤더 파일을 포함시키고 매크로를 적용하며 #ifdef나 #endif와 같은 조건부 컴파일에 따라 일부 코드를 제거하는 등의 작업이 수행된다. 2. 컴파일러 ㆍ 전처리된 소스코드가 실제로 컴파일 되는 단계 ㆍ c++소스코드를 중간 코드나 어셈블리어로 변환하고 그 후에 어셈블 과정을 거쳐서 오브젝트 파일을 생성함 ㆍ 이 과정에서 여러 단계를 거쳐서 타깃 플랫폼에 맞는 언어(대게 어셈블리어)로 변환함. 3. 어셈블러 ㆍ 컴파일러가 생성한 어셈블리어 코드를 기계어로 변환하는 역할을 한다. ㆍ ..

변수와 상수 영역과 Lifecycle

▶ 변수와 상수의 영역이란? ㆍ변수와 상수가 프로그램에 걸쳐서 영향을 미칠 수 있는 범위를 의미한다. ㆍ변/상수의 종류에 따라서 해당 변/상수에 접근할 수 있는 범위가 달라진다 ㆍ 바꿔 말해 서로 다른 영역에서만 유효한 동일한 이름을 지닌 변/상수가 존재할 경우 각각 변/상수는 별개 ㆍ c/c++에선 {}의 조합을 통해 특정 영역의 시작과 끝을 나타내는 것이 가능하다. ▶ C / C++ 언어의 변수 상수 종류 1. 로컬 : 특정 영역에서만 접근이 가능한 변/상수를 의미 2. 전역 : 프로그램 전체에서 접근이 가능한 변/상수를 의미 ㆍ 잘못 사용하면 메모리 누수가 발생하기 때문에 주의를 요함 ㆍ 모든 함수 밖에서 선언하면 된다. 3. 정적 로컬 : 특정 영역에서만 접근이 가능하다 ㆍ 단 지역변수와 달리 해..

상수

▶ 상수란? ㆍ 변수와 달리 저장된 데이터를 변경할 수 없는 공간에 할당된 수를 의미한다. ㆍ 상수는 한번 데이터를 저장하고 나면 변경하는 것이 일반적으로는 불가능하다. ▶ c / c++언어 상수의 종류 1. 리터널상수 ㆍ 이름이 없는 상수를 말한다. ㆍ 프로그램 코드에서 직접 사용되는 고정된 값을 말한다. 2. 심볼릭 상수 ㆍ 이름이 있는 상수를 말한다. ㆍ 특정 값을 가진 이름이 붙은 상수. C++에서는 const키워드나 #define 전처리기를 사용하여 심볼릭 상수를 만들 수 있다. ▶ const 키워드란? ㆍ 상수를 정의하는데 사용되는 키워드로 const로 선언된 변수는 한 번 초기화 하면 그 값을 변경할 수 없다. ㆍ const는 함수 매개변수와 return 타입에도 사용 될 수 있으며 해당 값..