이것은 직접 this question에서 영감을 얻은 것입니다.
부울에 적용 할 때 비트 연산자가 단락하지 않을 것이라는 많은 참조/문이 있습니다. 따라서 boolean a = f() & g()
인데, f()
과 g()
이 모두 부울을 반환하는 경우 모두이 항상 평가됩니다.
그러나, JLS는 말한다 :'단락 논리 연산자가 실제로 단락이되지 않는다는 것을 (사양에서) 보증해야합니까?
15.22.2 부울 논리 연산자 &,^및 |
&,^또는 | 연산자가 부울 또는 부울 유형 인 경우 유형은 비트 연산자 표현식이 부울입니다. 모든 경우에 피연산자 은 필요에 따라 변환 해제 (§5.1.8)의 대상이됩니다.&의 경우 두 피연산자 값이 모두 참이면 결과 값이 참입니다. 그렇지 않으면 결과는 false입니다.
^의 경우 피연산자 값이 다른 경우 결과 값은 참입니다. 그렇지 않으면 결과는 false입니다.
|에 대해 두 피연산자 값이 모두 거짓이면 결과 값은 false입니다. 그렇지 않으면 결과가 true입니다.
두 피연산자가 실제로 평가된다는 것을 어떻게 보증합니까? xor
을 제외하고 인수 중 하나 (그리고 처음에이 두 번째/오른쪽 인 일 수 있음)가 조건을 위반하는 경우에도 결과를 중단하여 결과를 반환 할 수 있습니다.
예 : a & b
은 표현식을 false로 평가하려면 b
을 false로 평가해야합니다.
참고 사항 :이 방법으로 구현되는지 (단락되지 않는지) 묻지는 않습니다. 물론입니다.
겠습니까 짧은 회로를 구현 는 언어 기준을 위반 :
내가 부탁 해요?
예. 표준 텍스트는 두 피연산자 값의 값을 나타내며, 두 표현식 모두를 추출해야합니다. – rsp