Java에서 mod의 구문
유사 부드의 예로서:
if ((a mod 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
의미가 약간 다른 modulo 연산자 대신 음이 아닌 정수의 경우 나머지 연산자를 사용할 수 있다.%
다음과 같다 정확한 예:
if ((a % 2) == 0)
{
isEven = true;
}
else
{
isEven = false;
}
이는 단일 라이너로 단순화할 수 있다.
isEven = (a % 2) == 0;
다음은 최소 Java 코드로 의사 코드를 표현한 것이다.
boolean isEven = a % 2 == 0;
나는 이제 그것을 그것의 구성요소로 분해할 것이다.자바에서 계량 연산자는 백분율 문자(%)이다.따라서 int % int를 복용하면 다른 int를 반환한다.이중 등가 연산자는 int 쌍과 같은 값을 비교하고 부울을 반환하는 데 사용된다.그런 다음 부울 변수 'isEven'에 할당된다.연산자 우선 순위에 기초하여 계수를 비교하기 전에 평가한다.
다른 사람들은 이미 답을 주었으므로, 약간의 문맥을 추가하겠다. % "계량" 운영자는 실제로 나머지 작업을 수행하고 있다.모드와 렘의 차이는 미묘하지만 중요하다.
(-1모드 2)는 일반적으로 1을 준다.보다 구체적으로 X와 Y라는 두 정수를 부여한 연산(X mod Y)은 [0, Y] 범위의 값을 반환하는 경향이 있다.다르게 말하면 X와 Y의 계수는 항상 0보다 크거나 같고 Y보다 작다.
% 또는 rem 연산자로 동일한 연산을 수행하면 X 값의 기호가 유지된다.X가 음수이면 (-Y, 0)의 범위에서 결과가 나온다.X가 양수일 경우 [0, Y] 범위에서 결과를 얻는다.
종종 이런 미묘한 구별은 중요하지 않다.그러나 코드 질문으로 돌아가면 "동일성"을 위한 여러 가지 해결 방법이 있다.
첫 번째 접근법은 초심자에게 좋다. 왜냐하면 그것은 특히 장황하기 때문이다.
// Option 1: Clearest way for beginners
boolean isEven;
if ((a % 2) == 0)
{
isEven = true
}
else
{
isEven = false
}
두 번째 접근법은 언어를 더 잘 활용하며, 더 간결한 코드로 이어진다. (== 오퍼레이터가 부울을 반환한다는 것을 잊지 말 것)
// Option 2: Clear, succinct, code
boolean isEven = ((a % 2) == 0);
세 번째 접근법은 완전성을 위해 여기에 있으며, 3차 연산자를 사용한다.비록 제3의 연산자가 종종 매우 유용하지만, 이 경우 나는 제2의 접근법을 우월하다고 생각한다.
// Option 3: Ternary operator
boolean isEven = ((a % 2) == 0) ? true : false;
네 번째와 마지막 접근법은 정수의 이진 표현에 대한 지식을 사용하는 것이다.최하위 비트가 0이면 숫자는 짝수다.이것은 비트 앤 오퍼레이터 (&)를 사용하여 확인할 수 있다.이러한 접근 방식이 가장 빠르지만(분할 대신 간단한 비트 마스킹을 하고 있다), 초보자에게는 아마도 조금 진보된/공만된 것 같다.
// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);
여기서 비트 앤 오퍼레이터를 사용하여 옵션 2에 표시된 간결한 형태로 표현했다.옵션 1의 양식(그리고 대안 옵션 3)에 그것을 다시 쓰는 것은 독자들에게 연습으로 남겨진다.;)
그게 도움이 되길 바래.
Java의 %(REM) 작업이 음수 X 및 양의 Y 값에 대한 MOD와 같이 작동하도록 하려면 다음 방법을 사용하십시오.
private int mod(int x, int y)
{
int result = x % y;
if (result < 0)
{
result += y;
}
return result;
}
또는 3차 연산자와 함께(일부 상황에서는 가능하지 않거나 효율적이지 않음):
private int mod(int x, int y)
{
int result = x % y;
return result < 0? result + y : result;
}
자바에는 실제로 C처럼 모듈로 연산자가 없다. 자바에서 %는 나머지 연산자다.양의 정수에서는 모듈로와 똑같이 동작하지만 음의 정수에서는 다르게 동작하며, 모듈로와 달리 부동 소수점 번호로도 동작할 수 있다.하지만, 긍정적인 정수 이외의 어떤 것에 %를 사용하는 경우는 드물기 때문에, 그것을 모듈로 부르고 싶다면, 자유롭게 하라!
값이 음수인지 확인하여 적절한 모듈로를 할 수 있고, 음수인지(다수가 제시한 방식)를 정정할 수 있지만, 보다 콤팩트한 해결책이 있다.
(a % b + b) % b
이렇게 하면 먼저 modulo를 수행하여 값을 -b -> +b 범위로 제한한 후 값이 양수인지 확인하기 위해 b를 더하여 다음 modulo가 0 -> b 범위로 제한하도록 한다.
참고: b가 음수일 경우 결과도 음수일 것이다.
이 코드는 modulo를 사용하지 않고 훨씬 빠르게 실행된다.
public boolean isEven(int a){
return ( (a & 1) == 0 );
}
public boolean isOdd(int a){
return ( (a & 1) == 1 );
}
Java에서 그것은 이다.%
운영자: 15.17.3. 나머지 운영자 %
또한 다음에도 있다는 점에 유의하십시오.java.lang.Math
은 ㄴ다다다이다.%
다른 기호를 가진 논쟁의 경우:
public static int floorMod(int x, int y)
남들이 지적한 바와 같이, The는%
(iiii) 연산자(수子) 수자(수子) 수자(수子)와 같지 .mod
계량 작동/기능
mod
대%
그
x mod n
맵 함수수수수맵x
로.n
의 범위 내에서[0,n)
.
에 려면에x % n
연산자 지도x
로.n
의 범위 내에서(-n,n)
.
수학적 계량연산을 사용하는 방법을 가지고 앞에 있는 기호를 신경쓰지 않기 위해서입니다.x
사용할 수 있는 항목:
((x % n) + n) % n
아마도 이 사진은 더 잘 이해하는데 도움이 될 것이다(이 사진부터 머리를 감싸느라 힘들었다)
if (a % 2 == 0) {
} else {
}
% 연산자를 사용하기 전에 사양을 검토하십시오.
http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.17.3
// bad enough implementation of isEven method, for fun. so any worse?
boolean isEven(int num)
{
num %= 10;
if(num == 1)
return false;
else if(num == 0)
return true;
else
return isEven(num + 2);
}
isEven = isEven(a);
또한 다음과 같이 mod를 사용할 수 있다.
int a = 7;
b = a % 2;
b
1과 같을 것이다.왜냐하면7 % 2 = 1
.
Java의 나머지 연산자는%
modulo 연산자는 다음과 같이 표현할 수 있다.
public int mod(int i, int j)
{
int rem = i % j;
if (j < 0 && rem > 0)
{
return rem + j;
}
if (j > 0 && rem < 0)
{
return rem + j;
}
return rem;
}
또 다른 방법은 다음과 같다.
boolean isEven = false;
if((a % 2) == 0)
{
isEven = true;
}
그러나 가장 쉬운 방법은 다음과 같다.
boolean isEven = (a % 2) == 0;
@Steve Kuo가 말한 것처럼.
인Java
, mod 연산은 다음과 같이 수행될 수 있다.
Math.floorMod(a, b)
참고: mod 조작은 나머지 조작과는 다르다.인Java
, 나머지 연산은 다음과 같이 수행할 수 있다.
a % b
modulo 연산자는 %(백분 기호)이다.균일성을 검정하거나 일반적으로 2의 검정력에 대해 modulo를 실행하려면 isEven = !(a & 1 )와 같이 &(the and operator)를 사용할 수도 있다.
@Cody의 코드에 대한 대안:
계량 연산자 사용:
bool isEven = (a % 2) == 0;
나는 이것이 if/else보다 약간 더 나은 코드라고 생각한다. 왜냐하면 중복과 사용되지 않는 유연성이 적기 때문이다.검사하려면 두뇌 파워가 좀 더 필요하지만, 좋은 이름이란 것은isEven
보상하다
참조URL: https://stackoverflow.com/questions/90238/whats-the-syntax-for-mod-in-java
'Programing' 카테고리의 다른 글
Vue 및 Vuex: 상태를 변경할 때 계산된 속성이 호출되지 않음 (0) | 2022.04.20 |
---|---|
왜 float에 대한 지정자가 printf에 정의되지 않았는가? (0) | 2022.04.20 |
Vue.js의 eslint에서 '구성 요소가 등록되었지만 사용되지 않음' 제거 (0) | 2022.04.20 |
장치 드라이버 쓰기를 어떻게 시작해야 하는가? (0) | 2022.04.20 |
템플릿이나 프레임워크를 사용하지 않고 Phonegap으로 Vue.js 설정 (0) | 2022.04.20 |