>백엔드 개발 >C++ >음의 모듈로 연산을 올바르게 처리하려면 어떻게 해야 합니까?

음의 모듈로 연산을 올바르게 처리하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-13 13:22:43599검색

How Do I Handle Negative Modulo Operations Correctly?

네거티브 모듈로의 과제 탐색

음수를 처리할 때 모듈로 연산자(%)가 까다로울 수 있습니다. 양의 정수에 대해서는 나머지를 원활하게 반환하지만 음수에 대한 동작은 종종 혼란을 야기합니다. 이 연산자는 나눗셈 후 나머지를 제공합니다.

네거티브 모듈로의 문제

길이가 3인 배열을 생각해 보세요.

<code>i % 3 =
4 -> 1
3 -> 0
2 -> 2
1 -> 1
0 -> 0
-1 -> -1
-2 -> -2
-3 -> 0
-4 -> -1</code>

양수 범위를 순환하는 양수 대응과 달리 음수 나머지가 어떻게 음수로 유지되는지 확인하세요.

네거티브 모듈로 솔루션

음수가 예상대로 작동하도록 하려면(래핑) 사용자 정의 함수가 필요합니다.

<code class="language-c++">int GetArrayIndex(int i, int arrayLength) {
    int r = i % arrayLength;
    return (r < 0) ? (r + arrayLength) : r;
}</code>

작동 방식

이 함수는 arrayLength가 음수인 경우에만 r를 나머지(r)에 교묘하게 추가합니다. 이는 원하는 모듈로 동작을 모방하여 음수 나머지를 양수 범위로 "래핑"합니다.

실습

3요소 배열로 함수를 테스트해 보겠습니다.

GetArrayIndex( 4, 3) -> 1 GetArrayIndex( 3, 3) -> 0 GetArrayIndex( 2, 3) -> 2 GetArrayIndex( 1, 3) -> 1 GetArrayIndex(0, 3) -> 0 GetArrayIndex(-1, 3) -> 2 GetArrayIndex(-2, 3) -> 1 GetArrayIndex(-3, 3) -> 0 GetArrayIndex(-4, 3) -> 2

이 사용자 정의 함수는 음의 모듈로 연산을 효과적으로 처리하여 일관되고 예측 가능한 결과를 제공합니다. 이제 예상치 못한 동작이 발생하지 않고 자신있게 음수 모듈로 작업을 수행할 수 있습니다.

위 내용은 음의 모듈로 연산을 올바르게 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.