변수 a와 b가 32 비트 정수라고 가정하면 삼항 또는 비교 연산자를 사용하지 않고 a <b이면 0을 반환하고 a> = b이면 1을 반환하는 방법이 있습니까?
할 수 있지만 예쁘지 않습니다.
문제는 언급했듯이 오버플로입니다. 그러나 다음과 같이 해결할 수 있습니다.
return ((x - y) ^ ((x ^ y) & ((x - y) ^ x))) >>> 31;
서명 된 버전의 경우 또는
return ((~x & y) | ((~x | y) & (x - y))) >>> 31;
서명되지 않은 버전의 경우.
는 >>>
자바로, 부호없는 오른쪽 시프트있다.
x = b, y = a
기능과 일치 하도록 함께 사용하십시오 .
Hacker 's Delight에서 "comparison predicates"라는 이름으로 이들 (및 기타)을 찾을 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다