public static void main(String[] args) {
int a = 5;
int b = 0;
System.out.printf("a=%d, b=%d%n", a, b);
// || : 좌측이 참이기때문에 우측 피연산자는 평가하지 않았다. -> b의 값은 그대로 남아있다.
System.out.printf("a!=0 || ++b!=0 = %b%n", a!=0 || ++b!=0);
System.out.printf("a=%d, b=%d%n", a, b);
// && : 좌측이 거짓이기때문에 우측 피연산자는 평가하지 않았다. -> b의 값은 그대로 남아있다.
System.out.printf("a==0 && ++b!=0 = %b%n", a==0 && ++b!=0);
System.out.printf("a=%d, b=%d%n", a, b);
// && : 좌측이 참이기떄문에 우측 피연산자도 평가가 되었다. -> -> b의 값이 증가되었다.
System.out.printf("++b!=0 && a==0 = %b%n", ++b!=0 && a==0 );
System.out.printf("a=%d, b=%d%n", a, b);
}
public static void main(String[] args) {
boolean b = true;
char ch = 'C';
System.out.printf("b=%b%n", b);
System.out.printf("!b=%b%n", !b);
System.out.printf("!!b=%b%n", !!b);
System.out.printf("!!!b=%b%n", !!!b);
System.out.println();
System.out.printf("ch=%c%n", ch);
System.out.printf("ch < 'a' || ch > 'z'=%b%n", ch < 'a' || ch > 'z');
System.out.printf("!('a'<=ch && ch<='z')=%b%n", !('a'<=ch && ch<='z'));
System.out.printf(" 'a'<=ch && ch<='z' =%b%n", 'a'<=ch && ch<='z');
}
논리부정연산자의 연산 순서 : 단항연산자이기 때문에 피연산자와 가까운 것부터 연산이 된다.
!!b
!!true
!false
true