C/C++/비트/쉬프트2012. 9. 2. 14:05

int v;

bool f; // v가 2의 n승이면 true, 아니면 false;

// 음수는 안됨


f = (v & (v - 1)) == 0; // 0도 포함됨


// 0을 제외하고 싶다면

f = v && !(v & (v - 1));

Posted by 투명테잎
C/C++/비트/쉬프트2012. 9. 2. 13:59

int v;

unsigned int r; // v의 절대값

const int mask = v >> (sizeof(int) * CHAR_BIT - 1);

// CHAR_BIT 는 char의 비트수


r = (v + mask) ^ mask;


// or

r = (v ^ mask) - mask;


출처 : http://graphics.stanford.edu/~seander/bithacks.html

Posted by 투명테잎
C/C++/비트/쉬프트2012. 9. 2. 13:54

int x, y;

bool f; // x와 y의 부호 비교값, 두 수의 부호가 같다면 false, 다르다면 true


f = (x ^ y) < 0;


f = (x ^ y) >> (sizeof(int) * CHAR_BIT - 1);

// CHAR_BIT 는 char의 비트수


출처 : http://graphics.stanford.edu/~seander/bithacks.html

Posted by 투명테잎