본문 바로가기

프로그래밍

(77)
LSB, MSB LSB (Least Significant Bit) : 하나의 데이터 형에서 가장 낮은 위치의 비트이다. 위치는 가장 값이 작은 비트인 2^0에 위치하고 있다. 해당 데이터 형에 들어있는 실제 숫자가 짝수인지 홀수인지 쉽게 알아낼 수 있다. 주로 난수발생 함수, 해시 함수, 검사합(CheckSum) 함수 등에서 많이 쓰인다. MSB (Most Significant Bit) : 어떠한 데이터 형의 최상위 비트를 의미한다. 데이터 형에 따라서 특징이 조금 나뉜다. Signed : 부호를 가지는 값 (양수, 음수를 구별한다) Unsigned : 부호를 가지지 않는다 (오직 양수) 1.. Unsigned char 데이터 형에서는 2^7이라는 값, 즉 가장 값이 큰 위치의 최상위 비트이다. 2.. Signed ch..
메모리의 구조 메모리의 구조는 총 4가지의 영역으로 나뉜다. 1. 코드(code) 영역 메모리의 코드 영역은 실행할 프로그램의 코드가 저장되는 영역이다. CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다. 2. 데이터(data) 영역 메모리의 데이터 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역이다. 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다. 3. 스택(stack) 영역 메모리의 스택 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다. 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다. 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 한다. 4. 힙(heap) 영역 메모리의 힙 영역은 사..
그래프(graph) 기초 그래프 : 정점의 모음과 이 정점을 잇는 간선의 모음과의 결합 정점의 집합을 V, 간선의 집합을 E, 그리고 그래프를 Q라고 했을 때 G = (V, E)이다. 간선으로 연결되어 있는 두 정점을 가리켜 서로 '인접(adjacent), 또는 이웃 관계에 있다고 말한다. 경로는 길이는 가지는데, 길이는 정점과 정점 사이에 있는 간선의 수로 정의된다. 간선이 방향성을 가지면 방향성 그래프, 방향성이 없으면 무방향성 그래프가 된다. 인접 행렬(Adjacency Matrix) : 정점끼리의 인접 관계를 나타내는 행렬 그래프의 정점의 수를 N이라고 한다면 N*N크기의 행렬을 만들어 행렬의 각 원소를 한 정점과 또 다른 정점이 인접해 있는 경우 1로 표시하고, 인접해 있지 않은 경우 0으로 표시한다. 장점 : 정점 간..
함수 호출 규약 함수 호출 규약 : 함수 호출 시 전달되는 인자의 순서나 함수가 종료될 때 함수의 스택을 정리하는 시점등을 약속한 것이다 stdcall, cdecl, thiscall, fastcall 등이 있다. 1. cdecl 스택으로 전달한 매개변수를 함수를 호출한 위치에서 정리하는 방식. 매개변수 전달을 위해 사용한 스택을 call 명령 다음에 정리한다. 2. stdcall 스택의 정리를 함수 내부에서 처리한다. 함수를 호출하는 위치에서는 함수를 호출만하고 스택정리를 하지 않는 방식이다. 3. fastcall 처음 n개의 매개변수를 스택 대신 레지스터로 전달하는 방식. 4.. thiscall 인스턴스의 주소가 기억된 후 호출되는 함수이다. 2 3 4 는 함수 호출 당한 쪽에서 스택 프레임을 정리한다
this this : 객체 자신을 가리키는 용도 객체자신의 주소 값을 의미한다. this 포인터는 그 주소 값과 자료형이 정해져 있지 않은 포인터이다. this->num=207; this는 객체를 참조하는 포인터다. 객체의 포인터로는 지역변수에 접근이 불가능하다 멤버변수만 접근이 가능하다 Self-Reference : 객체 자신을 참조할 수 있는 참조자이다
RTTI (Run Time Type Information) RTTI (Run Time Type Information) : 런타임 타입 정보, 객체의 런타임 정보를 얻을 수 있는 기능이다. 1. dynamic_cast : RTTI를 이용하여 객체 계층 간에 타입 변환을 안전하게 할 수 있도록 해준다. virtual이 없는 클래스에 하게 되면 컴파일러 오류가 발생한다. 2. typeid : 런타임에 객체의 타입이 무엇인지 알 수 있게 해준다. 객체가 다형성을 가지면 virtual가 하나라도 있어야 올바르게 작동한다.
4가지 캐스팅 1. const_cast : const 변수의 상수 속성을 없애고자 할 때 사용한다. 네 종류의 방법 중 상수 속성을 없애는 유일한 캐스팅 방법이다. ex) exturn void ExFunc(char* str); void f(const char* str) { ExFunc(const_cast(str); } 2. static_cast : 가장 일반적인 타입 변환을 수행한다. 예를 들어 int 변수를 이용해서 double 타입의 결과값을 계싼할 때 정수 나눗셈이 발생하지 않게 하려면 static_cast를 이용해서 int 변수를 double로 변환한다. ex) int i = 3; int j = 4; double result = static_cast(i) / j; 3. reinterpret_cast : 특별한 ..
map map 컨테이너 : 연관 컨테이너 중 자주 사용하는 컨테이너로 원소를 key와 value의 쌍으로 저장한다. set과 map의 차이 : set은 원소로 key 하나만을 저장하지만, map은 원소로 key와 value의 쌍을 저장한다. key는 중복으로 저장될 수 없으며 중복 key를 저장해야 한다면 multimap을 사용해야 한다. map의 원소는 pair 객체로 저장된다. pair 객체의 first 멤버 변수는 key, second 멤버 변수는 value이다. insert() 멤버 함수는 pair 객체를 인자로 받아 map의 원소인 key와 value의 쌍을 저장한다. #include #include using namespace std; int main() { map m; m.insert(pair(5,..