정보실

웹학교

정보실

javascript 나머지 연산자와 모듈로 연산자 (JavaScript 코드 포함)

본문

JavaScript의 % 연산자는 모듈로 연산자가 아닌 나머지 연산자라는 것을 읽었을 것입니다. 이 블로그 게시물은 그 의미를 설명합니다.


개요 : 두 연산자 


매우 유사한 두 개의 연산자가 있다고 가정 해 봅시다.

  • 나머지 연산자 rem
  • 모듈로 연산자 mod

두 피연산자가 모두 동일한 부호를 갖는 경우 연산자는 동일한 결과를 생성합니다.

> 5 rem 3
2
> 5 mod 3
2

> -5 rem -3
-2
> -5 mod -3
-2

그러나 서로 다른 부호가 있는 경우 rem의 결과는 첫 번째 피연산자와 동일한 부호를 갖지만 mod의 결과는 두 번째 피연산자와 동일한 부호를 갖습니다.

> -5 rem 3
-2
> -5 mod 3
1

> 5 rem -3
2
> 5 mod -3
-1

왜 그런가요?


나머지 연산자 rem 


먼저 rem 연산자를 자세히 살펴 보겠습니다.


dividend rem divisor


나머지를 계산하기 위해 다음 두 방정식을 사용합니다.


dividend = divisor * quotient + remainder

|remainder| < |divisor|


dividend, divisor, quotient 및 remainder는 모두 정수입니다 (이 블로그 게시물을 위해).


나머지를 계산하려면 몫을 찾아야 합니다.


remainder = dividend - divisor * quotient


우리는divisor을 제수로 나누어서 그렇게 합니다. Math.trunc()는 결과 몫(quotient)이 정수인지 확인합니다.


Example 1: 5 rem 3 === 2

const dividend = 5;
const divisor = 3;
const quotient = Math.trunc(dividend / divisor);
assert.equal(quotient, 1);

Example 2: -5 rem 3 === -2

const dividend = -5;
const divisor = 3;
const quotient = Math.trunc(dividend / divisor);
assert.equal(quotient, -1);

모듈로 연산자 mod 


모듈로 연산자는 동일한 방정식을 기반으로 하지만 Math.floor ()를 사용하여 몫을 계산합니다.

  • 피제수와 제수가 모두 양수이면 모듈러스 연산자는 나머지 연산자와 동일한 결과를 생성합니다 (예 3).
  • 그러나 배당금과 제수에 서로 다른 부호가 있으면 결과가 다릅니다 (예 4).

그 이유는 Math.trunc()와 Math.floor()가 양수에 대해 동일한 결과를 생성하지만 음수에 대해서는 다른 결과를 생성하기 때문입니다.


Example 3: 5 mod 3 === 2 (dividend is 5, divisor is 3)

const dividend = 5;
const divisor = 3;
const quotient = Math.floor(dividend / divisor);
assert.equal(quotient, 1);

Example 4: -5 mod 3 === 1 (dividend is −5, divisor is 3)

const dividend = -5;
const divisor = 3;
const quotient = Math.floor(dividend / divisor);
assert.equal(quotient, -2);

모듈로에 대한 직관적인 설명 


모듈로는 임의의 숫자를 주어진 범위에 매핑하는 연산으로 볼 수도 있습니다. 예를 들면 다음과 같습니다.


x mod 3

maps x into the range

[0,3) = {0,1,2}

즉, 0이 포함되고 3이 제외됩니다.


x가 이미 범위 내에 있으면 매핑을 수행하는 것이 간단합니다.

> 0 mod 3
0
> 2 mod 3
2

x가 범위의 상한 보다 크거나 같으면 범위에 맞을 때까지 x에서 상한을 뺍니다.

> 4 mod 3
1
> 7 mod 3
1

이는 음이 아닌 정수에 대해 다음과 같은 매핑을 받고 있음을 의미합니다.

0 1 2 3 4 5 6 7
0 1 2 0 1 2 0 1

음수를 포함하도록 매핑이 확장되는 방식입니다.

-7 -6 -5 -4 -3 -2 -1  0  1  2  3  4  5  6  7
 2  0  1  2  0  1  2  0  1  2  0  1  2  0  1
> -1 mod 3
2
> -3 mod 3
0
> -4 mod 3
2

x rem 3 maps x as follows:

-7 -6 -5 -4 -3 -2 -1  0  1  2  3  4  5  6  7
-1  0 -2 -1  0 -2 -1  0  1  2  0  1  2  0  1














  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

페이지 정보

조회 3회 ]  작성일19-08-15 11:56

웹학교