Loading...

int와 float 연산

int a = 6600;int result = (int)((float)a * 0.01f);이렇게 하면 result 값은 66이 되어야 하지만 65가 된다. 정상적으로 하기 위해서는 이렇게 해야 한다.nt a = 6600;(int)Mathf.Round(a * 0.01f ); 혹시나 해서 추가 개별 연산 테스트를 해 봤다.int a = 6600;int result = (int)((float)a * 0.01f);// result 결과 65 float bb = (float)a * 0.01f;// bb 결과 66int cc = (int)66f;// cc 결과 66int dd = (int)bb;// cc 결과 66 그래서 시작한 디스어셈블리C++int a = 6600;00CA436E mov dword ptr [a]..

random

프로그래밍을 해 본 사람이라면 한번씩은 들어봤고 생각해 봤을 random. 렌덤이라면 말 그대로 "무작위"이다. 예전에 퍼즐게임을 만들어 본 적이 있다. 그때 고민했던 것이 어떻게 하면 중복되지 않는 무작위 숫자를 얻을 수 있을 까 였다. 아마 당시에는 이렇게 한 것 같다. 1. 원하는 범위의 랜덤값(ex : 0~99)을 담을 수 있는 배열을 생성한다. 0~99의 인덱스를 가지는 100개의 배열 설정. 2. 배열에 플래그를 줘서 랜덤값이 사용되었는지 안되었는지를 체크한다. 체킹만 하면 되기 때문에 배열의 자료형은 알아서 적당히... 당시에는 int형으로 한 것 같은데 지금 생각해보면 그냥 bit값만 체크하면 될듯. 예를들어 int가 4바이트를 보장한다면 32비트를 사용할 수 있으니 100개의 int 배열..

factory function (팩토리 함수)

새로 생성된 파생 클래스 객체에 대한 기본 클래스 포인터를 반환하는 함수. class TimeKeeper { public: TimeKeeper(void); virtual ~TimeKeeper(void); }; // 시간 계산이 어떻게 되는지 몰라도 시간 기록을 유지하기 위한 클래스들. class AtomicClock : public TimeKeeper { public: AtomicClock(void) { cout

Hash 함수 모음

// RS Hash Function unsigned int RSHash(const std::string& str) { unsigned int b = 378551; unsigned int a = 63689; unsigned int hash = 0; for(std::size_t i = 0; i < str.length(); i++) { hash = hash * a + str[i]; a = a * b; } return (hash & 0x7FFFFFFF); } // JS Hash Function unsigned int JSHash(const std::string& str) { unsigned int hash = 1315423911; for(std::size_t i = 0; i < str.length(); i++)..

boost::has_trivial_assign

boost::has_trivial_assign. : trival assignment operator를 가지고 있는지 없는지를 알아내는 메타함수. assignment operator은 대입연사자의 뜻. 클래스를 구현시 대입연산자(assignment operator)을 정의해주지 않으면 암묵적으로 대입연산자를 자동으로 생성. ex ) A& A::operator=(const A&); 이처럼 명시적으로 대입연산자를 정의하지 않으면 위와 같이 자동으로 만들어 주는 것을 trivial assignment operator(간단한 대입 연산자)이라고 한다. 이는 boost::true_type과 boost::false_type을 리턴해 준다. 리턴값이 boost::true_type이라는 말은 해당 타입에 대한 자동 대입..

메모리맵 파일

http://blog.naver.com/kimgudtjr?Redirect=Log&logNo=140117254752 [ 메모리 맵 파일 ] ================================================================================ [ 정의 ] 윈도우즈는 물리적인 메모리(RAM)가 부족할 경우 하드 디스크의 페이징 파일(Paging File)을 메모리 대신 사용한다. 마치 페이징 파일이 물리적인 메모리의 일부인 것처럼 프로세스의 주소 공간에 맵하여 사용하며 필요할 경우 RAM으로 읽어오므로 응용 프로그램의 입장에서 볼 때 페이징 파일은 속도가 좀 느릴 뿐 RAM과 전혀 다를 것이 없다. 운영체제가 하드 디스크의 페이징 파일을 RAM 대용으로 사용하는 것이..

LIB / DLL 차이점

DLL 차이점 http://blog.naver.com/PostList.nhn?blogId=topgunmagic&categoryNo=31 link : http://loger1000.springnote.com/pages/1626606 정적 링크라이브러리(Static Link Library)와 동적 링크라이브러리(Dynamic Link Library) -정적링크라이브러리- 프로그램에서 특정 함수를 사용할려구 할 때 라이브러리 파일을 project-->setting-->Link-->Object/library modules에 추가를 해주면 해당함수에 대한 기능이 구현된 부분이 실행파일에 덧붙여 지는 것이다. #pragma comment(lib, "opengl32.lib")이렇게 써주는 것두 같은 방법이다. -동적..

How to convert std::string to TCHAR*

How to convert std::string to TCHAR* Most of the time people used to get this error , cannot convert std::string to TCHAR* Here is the code snippet which will convert std::string to TCHAR* and vice verse typedef std::basic_string tstring; TCHAR* StringToTCHAR(string& s) { tstring tstr; const char* all = s.c_str(); int len = 1 + strlen(all); wchar_t* t = new wchar_t[len]; if (NULL == t) throw std..