자바에서의 부울에 대한 비트 연산자의 영향
비트 연산자는 변수를 이동하고 변수를 조금씩 조작해야 합니다.정수, 롱, 글자의 경우 이치에 맞습니다.이러한 변수에는 크기에 따라 적용되는 모든 범위의 값을 포함할 수 있습니다.
단, 부울의 경우 부울에는 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
'source' 카테고리의 다른 글
"NULL 포인터의 참조 해제"는 정확히 무엇을 의미합니까? (0) | 2023.01.22 |
---|---|
v-model을 사용한 Vuex 입력이 반응하지 않음 (0) | 2023.01.22 |
jQuery를 사용하여 키 누르기 이벤트를 트리거하는 결정적인 방법 (0) | 2023.01.22 |
Larabel에서 특수 문자를 사용하는 필터에 SQL REGEXP(mariadb)를 사용합니다. (0) | 2023.01.22 |
파일에 여러 행을 쓰려면 문자열에 새 행을 지정하려면 어떻게 해야 합니까? (0) | 2023.01.22 |