source

자바에서의 부울에 대한 비트 연산자의 영향

lovecheck 2023. 1. 22. 22:34
반응형

자바에서의 부울에 대한 비트 연산자의 영향

비트 연산자는 변수를 이동하고 변수를 조금씩 조작해야 합니다.정수, 롱, 글자의 경우 이치에 맞습니다.이러한 변수에는 크기에 따라 적용되는 모든 범위의 값을 포함할 수 있습니다.

단, 부울의 경우 부울에는 2개의 값만 포함할 수 있습니다.1 = 참 또는 0 = 거짓.하지만 부울의 크기는 정의되지 않았습니다.이 값은 바이트 크기 또는 작은 크기일 수 있습니다.

그러면 부울에 비트 연산자를 사용하면 어떤 효과가 있을까요?JVM은 기본적으로 이를 일반 논리 연산자로 변환하고 다음 단계로 넘어갑니까?부울을 조작 목적으로 단일 비트엔티티로 취급합니까?또는 부울 크기와 함께 결과가 정의되지 않았습니까?

연산자&,^,그리고.|오퍼랜드가 원시 적분형일 경우 비트 연산자입니다.오퍼랜드가 부울일 때 논리연산자가 되며 후자의 경우 동작이 지정됩니다.상세한 것에 대하여는, 「Java Language Specification」의 제15.22.2절을 참조해 주세요.

비트 연산자를 사용하면 단락 동작을 회피할 수 있습니다.

boolean b = booleanExpression1() && booleanExpression2();
boolean b = booleanExpression1() & booleanExpression2();

한다면booleanExpression1()까지 평가하다.false,그리고나서
booleanExpression2()첫 번째 케이스에서는 평가되지 않습니다.
booleanExpression2()(그리고 어떤 부작용이 있을지라도) 번째 사례에서 평가한다.

다른 답변에 포함된 내용 외에 주의할 점은&&그리고.||와는 다른 우선 순위를 가지다&그리고.|.

precedence 테이블에서 추출합니다(가장 높은 precedence가 맨 위에 있음).

bitwise AND                 &
bitwise exclusive OR        ^
bitwise inclusive OR        |
logical AND                 &&
logical OR                  ||

이게 무슨 의미죠?

아무 것도 아니에요 둘 중 하나만 고집한다면요&그리고.|또는 그것만&&그리고.||.

근데 그 이후로|보다 우선도가 높다&&(과 반대로)||precedence가 낮은 경우)를 자유롭게 혼합하면 예기치 않은 동작이 발생할 수 있습니다.

그렇게a && b | c && d와 같다a && (b | c) && d,
와는 반대로a && b || c && d어느 쪽인가 하면(a && b) || (c && d).

동일하지 않다는 것을 증명하려면 진실표에서 발췌한 것을 고려하십시오.

a | b | c | d | (b|c) | (a&&b) | (c&&d) | a && (b|c) && d | (a&&b) || (c&&d)
F | T | T | T |   T   |   F    |    T   |         F       |        T
                                                  ^                ^
                                                  |- not the same -|

OR이 AND보다 높은 우선순위를 가지도록 하려면|그리고.&&함께 사용할 수는 있지만 권장되지는 않습니다.

그러나 다른 기호를 사용할 때마다 우선순위를 명확히 하기 위해 괄호로 묶어야 합니다.(a && b) || c(우선순위 명확화 필요),a && b && c을 사용법

설령 그것이 효과가 있다 하더라도 너는 그것을 해서는 안 된다.언어 사양은 두 오퍼랜드가 모두 원시 정수 유형이거나 둘 다 부울 유형인 경우에만 비트 연산자를 정의합니다.다른 경우에는 결과가 정의되어 있지 않습니다.

http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5228

언급URL : https://stackoverflow.com/questions/1724205/effect-of-a-bitwise-operator-on-a-boolean-in-java

반응형