블로그 방문자중 다음과 같은 키워드로 검색한 사람이 있어서 서비스겸 답을 올림...(아마 예전에 북미취업 가이드에서 면접 질문 예제를 올릴 것 때문에 검색 hit가 된듯..)
A와 B가 8bit 숫자일때 A와 B의 값을 바꾸는 함수. 단 새로운 변수를 사용하면 안됨
A = A ^ B (^는 XOR 임)
B = A ^ B
A = A ^ B
팁: A ^ B는 A | B - A & B 임.. (즉, A나 B, 단 A B 둘다 포함인 것은 제외)
검증: 밴다이어 그램을 그려볼 것
2011년 8월 28일 일요일
2011년 8월 3일 수요일
Unlimited Detail 렌더링 기법 업데이트
Unlimited Detail 테크의 최근 업데이트 비디오. 예전에 이 테크에 대해 블로그 글을 올린적이 있어서 그냥 이번 것도 올림.. 예전에 비해 특별히 달라진 건 없는 듯...
현재 20 FPS 정도로 돌아간다는데.. 애니메이션 처리는 어떻게 할건지...?
2011년 6월 20일 월요일
난 assert() 대신 int 3를 쓴다.
물론 C 언어에서 제공하는 assert() 함수가 있다. 하지만 난 이걸 사용하지 않는다. 이 함수가 제공하는 callstack 꼬라지가 맘에 안들어서... -_- assert()에 실패한 코드라인이 callstack 젤 위에 등장해야 하는데 도무지 그러지가 않으니까.. 물론 callstack을 적당히 조작해서 assert()에 실패한 라인을 젤 위에 나오게 하는 꽁수도 있으나.. 매우 복잡해서 생락.... 대신 난 다음과 같은 ASSERT() 매크로를 만들어 사용한다.
#define ASSERT(expr, ...) if(!(expr)) __asm{ int 3 }
이 매크로가 하는일은 ASSERT에 실패할 때 그냥 코드 실행을 중지(break)하는 것... 이걸 사용하는 예는 다음과 같다.
ASSERT( life == sucks, "인생이 x같지 않다니 말이 되냐!?");
위의 문자열 메시지는 프로그래머가 코드 읽는데 도움이 되라고 있는 것.. 위 ASSERT()가 실패하면 디버거 에서 저 코드라인이 등장하니 그냥 문자열을 읽는 것만으로도 뭐가 문제인지 알수 있다.
이 방법은 하드웨어 인터럽트를 사용하므로.. PC에서만 돈다.. PowerPC 계열의 CPU에서 돌릴려면 다음과 같이 해야한단다.
#define ASSERT(expr, ...) if(!(expr)) asm{trap}
즐 코딩?
피드 구독하기:
글 (Atom)