2017-04-05 1 views
-3

현재 Java에서 % 연산자로 작업하고 있습니다. 나는 그것을 이해할 줄 알았지 만이 질문을 건너오고 나면 지금 혼란 스럽다. 그래서 나는 10 % 3 = 나머지 1을 알고 있습니다. 제 질문은 왜 3 % 8 = 나머지 3입니까? 저는 3이 8 제로가되기 때문에 이것이 0과 같을 것이라고 생각했습니다. 또 다른 예는 2 % 8 = 나머지 2 일 것입니다. 왜이 나머지가 제로가되지 않을까요? 누군가 이것이 왜 이것이 끔찍한지를 설명 할 수 있다면! 고맙습니다! 당신은 당신이 기대하는대로 음수를 취급에서 다음 Math.floorMod를 사용, 모듈로 연산자를 찾고 있다면나머지 연산자를 사용하는 방법

+3

다른 방법으로 '8'은 '3'으로 끝나고 나머지는 '3'이됩니다. '%'는'/'(또는 division)을 보완합니다. '2/8'은 '0'이므로 나머지는 원래 값 (또는 '2')입니다. 나머지가 '0'인 경우, 숫자는 '8'로 나눌 수 있어야합니다. 그래서, 8, 16, 24, 32, 40 등 –

+0

_3 0으로 8 번갑니다. 사실이 아닙니다. 3은 8 번으로 두 번갑니다. 그것에 대해 당신의 생각은 거꾸로. 8은 3 번 0 번에 들어가고 3 번 남은 부분은 여전히 ​​있습니다. – JackVanier

+0

이것은 모듈러스 연산자가 아닙니다. 그것은 * 나머지 연산자입니다. – EJP

답변

0

이는 수학적으로 정확한 동작입니다.

사람들이 내게 어림짐작을 덜어 주길 바라지 만, 정수 mod n은 모두 0에서 n - 1 사이의 정수입니다. 그들은 번호 이론과 암호학에 중요한 multiplicative group을 형성합니다. 또 다시, 단지 같은 그룹 - 사실, 당신이

for (int i = 0; i < x; i++) { 
    Console.WriteLine(i % n); 
} 

을한다면 이것은 당신에게 0 (1 N)에 모든 숫자를 줄 것이다.

세부 사항은 알 수 없지만 mathematical group은 "일반적인"산술로 예상했던 것과 다소 비슷하게 동작하는 연산 집합입니다. 예를 들어, 집합이 곱셈 아래에 그룹을 형성하면 곱셈은 해당 집합에 대해 "작동"한다는 의미입니다.

n이 소수 (예 : 32)의 제곱 인 경우 정수 mod n은 finite field을 형성합니다. 즉, 일반 산술과 매우 유사하게 동작합니다.

TL; DR | 피드백 보내기 현재 상태 현재 상태 이것은 의도적으로 설계된 동작입니다. 실제로 수학적으로 완벽하게 정확합니다.

관련 문제