논리 연산자
- 두 피연산자의 논리적인 판별을 수행하는 연산자
- 피연산자 모두 boolean 타입 데이터(true, false)만 사용 가능하며 결과값도 boolean 타입으로 리턴
< AND 연산자 ( & 또는 && ) - 논리곱 >
- 두 피연산자가 모두 ture일 경우에만 결과값이 true이고, 하나라도 false일 경우 결과값이 false
- F AND F = F, F AND T = F, T AND F = F, T AND T = T
- 그리고, ~이고 등의 접속사에 해당하는 의미로 사용됨 => 주로 A~B 사이 범위를 판별하는데 사용 (ex. A가 5보다 크고 10보다 작다)
boolean a = false;
boolean b = true;
System.out.println("AND(&&) 연산 진리표");
System.out.println("a(false) && a(false) = " + (a && a));
System.out.println("a(false) && b(true) = " + (a && b));
System.out.println("b(true) && a(false) = " + (b && a));
System.out.println("b(true) && b(true) = " + (b && b));
System.out.println();
System.out.println("a(false) & b(true) = " + (a & b) ); // 앞이 거짓이어도 뒤에까지 확인
// => '&&'이면 앞의 boolean 값이 false이면 뒤의 값 판단을 생략
// => '&'이면 앞의 boolean 값이 fasle일지라도 뒤의 값을 판단함
// '&' 보다는 '&&' 사용
< OR 연산자 ( | 또는 ||) - 논리합 >
- 두 피연산자 중 하나라도 true일 경우 결과값이 true이고 둘 다 false일 경우 결과값이 false
- F OR F = F, F OR T = T, T OR F = T, T OR T = T
- 또는 ~이거나 등의 접속사에 해당하는 의미로 사용 => 주로 A 조건 또는 B 조건 중 하나라도 만족하는 조건을 판별할 때 사용 (ex. A가 0보다 작거나 100보다 크다)
System.out.println("OR(||) 연산 진리표");
System.out.println("a(false) || a(false) = " + (a || a));
System.out.println("a(false) || b(true) = " + (a || b));
System.out.println("b(true) || a(false) = " + (b || a));
System.out.println("b(true) || b(true) = " + (b || b));
< NOT 연산자 (!) - 논리부정 >
- 단항연산자, 피연산자 앞에 ! 기호를 붙임
- 현재 boolean 값을 반대로 반전(현재 상태 반전) = !true = false, !false = true
System.out.println("NOT(!) 연산 진리표");
System.out.println("!a(false) = " + (!a) );
System.out.println("!b(true) = " + (!b) );
< XOR 연산자 (^) - 배타적 논리합(exclusive OR) >
- 두 피연산자가 서로 다를 경우 결과값이 true이고, 서로 같은 경우 결과값이 false
- F XOR F = F, F XOR T = T, T XOR F = T, T XOR T = F
System.out.println("XOR(^) 연산 진리표");
System.out.println("a(false) ^ a(false) = " + (a ^ a));
System.out.println("a(false) ^ b(true) = " + (a ^ b));
System.out.println("b(true) ^ a(false) = " + (b ^ a));
System.out.println("b(true) ^ b(true) = " + (b ^ b));
관계 연산자와 결합하여 대소 관계에 대한 논리적인 판별 확인 가능
int num = 1;
// 두 가지 관계 연산을 각각 적용할 경우
// => 각 연산자에 대한 결과만 판별함
System.out.println(num > 5); // num이 5보다 큰가? false
System.out.println(num < 10); // num이 10보다 작은가? true
// 만약, 두 가지 관계 연산을 하나로 결합하여 적용할 경우
// ex) num이 5보다 작거나(||) 100보다 큰가?
// => ~이고, 그리고 등의 의미는 AND 연산자 &&를 사용하여 결합
System.out.println(num > 5 && num < 10); //false (6~9 까지의 범위를 뜻함)
ex) num이 5보다 작거나(||) 100보다 큰가?
=> ~이거나, 또는 등의 의미는 OR 연산자 || 사용하여 결합
System.out.println(num < 5 || num > 100);
⇒앞이 true이기 때문에 뒤는 실행안함.
num = 150;
// NOT 연산자(!)는 현재 조건을 만족하지 않는가를 판별
// ex) num이 0보다 작거나(||) 100보다 큰 수가 아닌가(!)?
// = num 이 0 이상이고 100 이하인 수인가?
System.out.println(!(num < 0 || num > 100 ));
System.out.println(num >= 0 || num <= 100 ); // 위의 조건과 같은 문장
증감 연산자
- 단항연산자
- 수치데이터타입의 피연산자의 앞(좌측) 또는 뒤(우측)에 붙어서 해당 피연산자의 값을 1만큼 증가 또는 감소시키는 연산자
- 다른 연산과 결합하여 사용될 때 위치에 따라 결과가 다름
- 선행연산자 (전위연산자)
- 피연산자 앞(좌측) 에 위치하여 값을 1만큼 증가 또는 감소시킴 이 때, 다른 연산과 결합하여 사용하는 경우 먼저 피연산자의 값을 1 증가 또는 감소시킨 후 다른 연산에 참여함 ex) ++a, --a
- 후행연산자(후위연산자)
- 피연산자 뒤(우측) 에 위치하여 값을 1만큼 증가 또는 감소시킴 이 때, 다른 연산과 결합하여 사용하는 경우 먼저 다른 연산에 참여시킨 후 피연산자의 값을 1 증가 또는 감소시킴 ex) a++, a--
정수 a의 값을 1만큼 증가시키는 방법
byte a = 10;
**1. 일반적인 산술연산자와 대입연산자를 사용하는 방법**
// a = a + 1; // 컴파일 에러 발생! (byte + int = int + int = int)
a = (byte)(a + 1); // byte타입으로 형변환
**2. 확장 대입연산자를 사용하는 방법**
a += 1; // 형변환 불필요(연산 과정에서 자동 형변환 일어나지 않음)
**3. 증감연산자를 사용하는 방법**
a++; // 형변환 불필요( 연산 과정에서 자동 형변환 일어나지 않음)
System.out.println(a); -- **결과값 13**
증감연산자
int b = 5;
b++; // 변수 b의 값을 1만큼 증가시킴 5 -> 6으로 증가
System.out.println(b);
++b; // 변수 b의 값을 1만큼 증가시킴 6 -> 7로 증가
System.out.println(b);
b--; // 변수 b의 값을 1만큼 감소시킴 7 -> 6으로 감소
System.out.println(b);
--b; // // 변수 b의 값을 1만큼 감소시킴 6 -> 5로 감소
System.out.println(b);
증감연산자 위치에 따른 연산 과정의 차이
=> 다른 연산자와 결합하여 사용될 경우 주의 할 점
int x1 = 5;
int y1 = ++x1; // 선행연산자 (전위연산자)
// => 변수 x1의 값을 먼저 1만큼 증가시킨 후
// 대입연산자를 통해 x1값을 y1에 대입(저장)
// => 따라서, x1의 값이 5 -> 6으로 증가한 후 y1에 증가된 값 6이 저장
System.out.println(x1 + ", " + y1);
int x2 = 5;
int y2 = x2++; // 후행연산자 (후위연산자)
// => 변수 x2의 값을 먼저 y2에 대입한 후
// 증감연산자를 통해 x2의 값을 1만큼 증가시킴
// => 따라서, x2의 값 5가 먼저 y2에 저장된 후, x2 값이 5 -> 6으로 증가
System.out.println(x2 + ", " + y2); // 6, 5
대입연산자와 결합 대신 출력문에서도 사용 가능
x2 = 5;
System.out.println(++x2); // x2값을 먼저 1 증가시킨 후 출력(6 출력)
// => 출력문에 x2 값을 전달하기 전에 먼저 증감연산자가 사용됨
System.out.println(x2++); // x2 값을 먼저 출력 후 1 증가시킴 (6 출력)
// => 출력문에 x2 값을 먼저 전달한 후 증감연산자가 사용됨
// 위의 과정에서 6이 출력된 후 6 -> 7로 증가되었으므로 7로 변경됨
System.out.println(x2); // x2 출력시 7 출력됨
*대입연산자는 우선순위가 제일 낮음
삼항연산자(조건연산자) ?:
- 피연산자가 3개인 연산자
- 조건식의 판별 결과가 true일 때와 false 일 때 서로 다른 위치의 값(또는 식)을 선택하는 연산자
- 조건식은 결과가 true 또는 false가 되는 식을 사용해야함
**< 기본 문법 >**
**조건식 ?** **값1**(true일때 선택) **:** **값2**(false일때 선택)
num이 0 이상인지 판별하는 식
int num = 0;
//num이 0 이상인지 판별하는 식
System.out.println(num >= 0);
System.out.println(num >= 0 ? "num은 양수!" : "num은 음수!");
// null이 0 이상일 경우 true가 리턴되고, true에 해당하는
// "num은 양수!" 값을 선택하게 되어 출력문에 출력
// => System.out.println("num은 양수!"); 문장과 결과가 동일
String result = num >= 0 ? "num은 양수!" : "num은 음수!";
System.out.println(result);
result = num > 0 ? "num은 양수!" : num < 0 ? "num은 음수!" : "num은 0";
'JAVA' 카테고리의 다른 글
[JAVA] 중첩 if문 (0) | 2023.09.08 |
---|---|
[JAVA] 조건문(if, if-else, 다중if -else if문) (0) | 2023.09.08 |
[JAVA] 6가지 연산자(결합, 대입, 비교) (0) | 2023.09.08 |
[JAVA] 산술 연산 시 자동 형변환 (0) | 2023.09.08 |
[JAVA] 산술연산자 (0) | 2023.09.08 |