Programming/C2008. 12. 6. 21:21

1. 임시 변수 없는 SWAP 매크로

#define SWAP(a, b) {(a)^=(b)^=(a)^=(b);} 


2. 주어진 수가 2의 제곱수(1, 2, 4, 8, 16 등등)인지 검사(출처: flipCode)

inline bool IsPow2(int v)
{
    return (!(v & (v - 1)));
}


3. 0이 아닌 비트들의 개수 세기...(예를 들어 0xf0는 4개..)(출처: flipCode)

8비트용:
v = (v & 0x55) + ((v >> 1) & 0x55);
v = (v & 0x33) + ((v >> 2) & 0x33);
return (v & 0x0f) + ((v >> 4) & 0x0f);

32비트용:
#define g31 0x49249249ul // = 0100_1001_0010_0100_1001_0010_0100_1001
#define g32 0x381c0e07ul // = 0011_1000_0001_1100_0000_1110_0000_0111


v = (v & g31) + ((v >> 1) & g31) + ((v >> 2) & g31);
v = ((v + (v >> 3)) & g32) + ((v >> 6) & g32);
return (v + (v >> 9) + (v >> 1 + (v >> 27)) & 0x3f; 

Posted by skensita