내용
"음수 % 양수" 의 값이 음수로 나와 양수로 바꿔줄 필요가 있었다.
Math클래스의 floorMod라는 연산을 찾았다.
public static int floorMod(int x, int y) {
return x - floorDiv(x, y) * y;
}
floorMod를 타고 들어가보니 floorDiv에 대해 먼저 알아야 했다.
public static int floorDiv(int x, int y) {
int r = x / y;
// if the signs are different and modulo not zero, round down
if ((x ^ y) < 0 && (r * y != x)) {
r--;
}
return r;
}
floorDiv는 "x / y"의 몫을 구하는데 x와 y의 부호가 다를 경우 처리하는 로직이 여기에 있다.
`(x ^ y) < 0`가 두 수의 부호가 다른 것을 판단한다.
숫자를 이진수로 나타냈을 때 최상위 비트가 1이면 음수, 0이면 양수이다.
따라서, XOR연산으로 부호가 다름을 표현할 수 있다.
floorDiv에서 x와 y의 부호가 다를 경우 몫에 1을 뺀 값을 반환한다.
따라서 floorDiv에서도 양수인 나머지를 구할 수 있다.
'TIL' 카테고리의 다른 글
[자바] Stream API (0) | 2024.05.14 |
---|---|
[스프링] [JPA] Querydsl 방언 사용하기 (0) | 2024.05.12 |
[데이터베이스] [MySQL] 전문 검색(FullText Search) (0) | 2024.05.12 |
[트러블슈팅] More than one row with the given identifier was found (0) | 2024.05.12 |
[트러블슈팅] CORS 설정 시 allowedOrigins 에러 (0) | 2024.05.11 |
[알고리즘] 에라토스테네스의 체 - JAVA (0) | 2024.05.11 |