배열 인덱스의 음수 처리
프로그래밍에서는 배열 요소에 액세스하기 위해 인덱스를 사용해야 하는 경우가 많습니다. 모듈로 연산자는 양수를 사용할 때 잘 작동하지만 음수는 처리 방법의 차이로 인해 문제가 발생할 수 있습니다.
모듈로 연산자(%)는 첫 번째 피연산자를 두 번째 피연산자로 나눈 나머지를 찾는 데 사용됩니다. 예:
<code>4 % 3 == 1 3 % 3 == 0 2 % 3 == 2 1 % 3 == 1</code>
그러나 모듈로 연산자는 음수를 처리할 때 다르게 동작합니다.
<code>-1 % 3 == -1 -2 % 3 == -2 -3 % 3 == 0 -4 % 3 == -1</code>
예상 동작과의 이러한 편차는 음수가 아닌 나머지를 생성하도록 설계된 모듈로 연산자의 기본 구현에서 비롯됩니다.
이러한 불일치를 해결하고 올바른 배열 인덱싱을 보장하려면 사용자 정의 모듈로 함수가 필요합니다. 이를 달성하는 한 가지 방법은 다음과 같습니다.
<code class="language-c++">int mod(int x, int m) { return (x%m + m)%m; }</code>
이 함수는 먼저 나머지를 계산한 다음 나머지가 음수인 경우 배열 길이를 더합니다. 이렇게 하면 음수 값인 경우에도 배열의 원하는 인덱스가 반환됩니다.
모듈식 작업 수를 최적화하는 또 다른 방법은 다음과 같습니다.
<code class="language-c++">int mod(int x, int m) { int r = x%m; return r < 0 ? r + m : r; }</code>
이 버전은 동일한 결과를 얻기 위해 추가적인 모듈로 연산 대신 조건문을 사용합니다.
이러한 사용자 정의 모듈로 함수를 사용하면 배열 인덱스의 음수를 효율적으로 처리하여 원하는 결과를 얻을 수 있습니다.
다음 코드 조각은 사용자 정의 모듈로 함수를 사용하여 음수가 포함된 배열의 색인을 올바르게 생성하는 방법을 보여줍니다.
<code class="language-c++">int GetArrayIndex(int i, int arrayLength) { return mod(i, arrayLength); } 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</code>
이 향상된 이해와 사용자 정의 모듈로 기능을 통해 음수는 더 이상 정확한 배열 인덱싱에 위협이 되지 않습니다.
위 내용은 배열 인덱싱에서 음수를 올바르게 처리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!