논리 연산자 &, |

이미 조건식의 결과가 결정이 나더라도 모든 조건을 끝까지 검사한다.

 

&

T & T = T

T & F = F

F & T = F: 앞이 F면 뒤를 보지 않아도 결과는 F이다. 그러나 & 연산자는 뒤의 조건도 모두 확인해서 F로 결론을 낸다.

F & F = F

 

|

T | T = T

T | F = T: 앞이 T면 뒤를 보지 않아도 결과는 T이다. 그러나 | 연산자는 뒤의 조건도 모두 확인해서 T로 결론을 낸다.

F | T = T

F | F = F

 


논리 연산자 &&, ||

조건식의 결과가 결정되는 순간 검사를 종료한다.

 

&&

T && T = T

T && F = F

F && T = F: 앞이 F면 뒤를 보지 않아도 결과는 F이다. &&는 뒤의 조건을 확인하지 않고 바로 F로 결론을 낸다.

F && F = F

 

||

T || T = T

T || F = T: 앞이 T면 뒤를 보지 않아도 결과는 T이다. ||는 뒤의 조건을 확인하지 않고 바로 T로 결론을 낸다.

F || T = T

F || F = F

 

package day03;

public class Operator {
    public static void main(String[] args) {
        int i = 1;
        int j = i++; //j=1, i=2
        if((i>++j)&(i++ ==j)){ //(2>2)=F & (2==2)=T -> i =3 ==> F
            i = i + j; //실행x
        } //i=3, j=2
        System.out.println("i=" + i);
        System.out.println("j=" + j);

        int x = 1;
        int y = x++; //y=1, x=2
        if((x>++y)&&(x++ ==y)){ //y=2, ((2>2)=F && (뒤는 실행x) ==> F
            x = x + y;
        }
        System.out.println("x=" + x); //x=2

        int k = 0;
        int p = 1;
        if((k++ ==0)|(p++ ==2)) { // (0==0)=T -> k=1 | (1==2)=F -> p=2 ==> T
            k=42; //실행o
        }
        System.out.println("k="+k + ", p=" + p); //k=42, p=2

        int a = 0;
        int b = 1;
        if((a++ ==0)||(b++ ==2)) { //(0==0)=T -> a=1 || (뒤는 실행x) => T
            a=42;
        }
        System.out.println("a="+a + ", b=" + b); //a=42, b=1
    }
}

+ Recent posts