int isGreater(int x, int y) {

/* boolean value of sign x is 1 = negative, 0 = non-neg */

int sign_x = x >> 31;

/* boolean value of sign y is 1 = negative, 0 = non-neg */

int sign_y = y >> 31;

/* if x is larger, sign bits of (~y + x) is 0

if y is larger, sign bit of (~y + x) is 1 */

int equal = !(sign_x ^ sign_y) & ((~y + x) >> 31);

/* if signs are opposite, then reverse */

int notEqual = sign_x & !sign_y;

/* this returns 0 when x is >, so we take the negation */

return !( equal | notEqual);

}


x - y의 결과를 보려면 (x + ~y)가 아니라 (x + (~y + 1))을 해야 하는거 아님? 이해가 안되네


*수정 x > y일 경우라서 그냥 0일 경우도 무시하려고 +1 안한듯, 여기는 이해했는데 부호 부분이 여전히 이해가 안되네