논리 연산자
1. 논리 연산자 &&, ∥, !
- && (AND결합) : 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다.
true && true -> true
true && false -> false
false && true -> false
false && false -> false
- || (OR결합) : 피연산자 중 어느 한쪽만 true이면 true를 결과로 얻는다.
true || true -> true
true || false -> true
false || true -> true
false || false -> false
1) 주의할점
- x는 10보다 크고, 20보다 작다 → (10 < x) && (x < 20)
- x는 2의 배수 또는 3의 배수이다 → ((x % 2) == 0) || ((x % 3) == 0)
- x는 2의 배수 또는 3의 배수지만 6의 배수는 아니다 → (((x % 2) == 0) || ((x % 3) == 0)) && x % 6 ! = 0 : && 가 || 보다 우선순위가 높다.
- 문자 ch는 숫자(’0’ ~ ‘9’)이다.
- 문자 ch는 대문자 또는 소문자이다.
2) 논리 부정 연산자 !
- x = true → !x = false
- x = false → !x = true
- 주로 조건문과 반복문의 조건식에 많이 쓰인다.
public class E_Logical {
// 사용자가 입력한 정수값이 1 ~ 100 사이의 값인지 확인하기
public void method1() {
int num = 0;
boolean result;
Scanner scanner = new Scanner(System.in);
System.out.print("임의의 정수를 입력해주세요 > ");
num = scanner.nextInt(); // 변수 생각 못하고 진행하는 경우 -> alt + shift + L
// 1 < = num <= 100
// result = 1 <= num <= 100; // 두 개를 동시에 넣을 수 없다.
result = (1 <= num) && (num <= 100);
System.out.println("사용자가 입력한 값이 1 이상 100 이하의 값인가요? " + result);
scanner.close();
}
// 사용자가 입력한 값이 y 또는 Y 인지 확인하기
public void method2() {
char ch = '\u0000';
String line = null;
boolean result = false;
Scanner scanner = new Scanner(System.in);
System.out.print("계속 진행하시려면 y 혹은 Y를 입력하세요. >");
line = scanner.nextLine();
// System.out.println(line.length()); // 글자의 길이 확인
// 조건문 ()안에 조건식이 true일 때 중괄호 블록({})이 실행된다.
if(line.length() > 0) {
ch = line.charAt(0);
result = (ch == 'y') || (ch == 'Y');
}
System.out.println("사용자가 입력한 값이 y 또는 Y 입니까? : " + result);
scanner.close();
}
// Short Cut 연산 테스트
public void method3() {
int num = 10;
boolean result = false;
System.out.println("&& 연산 전의 num의 값: " + num);
// && 연산자를 기준으로 앞에서 이미 false가 나왔기 때문에 굳이 뒤쪽의 연산을 수행하지 않는다.
result = (num < 5) && (++num > 0);
System.out.println("result : " + result);
System.out.println("&& 연산 후의 num의 값: " + num);
System.out.println();
// || 연산자를 기준으로 앞에서 이미 true가 나왔기 때문에 굳이 뒤쪽의 연산을 수행하지 않는다.
System.out.println("|| 연산 전의 num의 값: " + num);
result = (num > 20) || (++num > 0);
System.out.println("result : " + result);
System.out.println("|| 연산 후의 num의 값: " + num);
System.out.println();
}
}
2. 비트 연산자 &, |, ^, ~, <<, >>
- | (OR연산자) : 피연산자 중 한쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.
- & (AND연산자) : 피연산자 양 쪽이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다.
- ^ (XOR연산자) : 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다.
그 외의 연산자
1. 조건 연산자 ? :
- 조건 연산자는 조건식, 식1, 식2 모두 세 개의 피연산자를 필요로 하는 삼항 연산자이며, 삼항 연산자는 조건 연산자 하나뿐이다.
2. 대입 연산자 =, op=
- 대입 연산자를 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용된다.
- 이 연산자는 오른쪽 피연산자의 값을 왼쪽 피연산자에 저장하며, 저장된 값을 연산결과로 반환한다.
- 대입 연산자는 연산자들 중에서 가장 낮은 우선순위를 가지고 있기 때문에 식에서 제일 나중에 수행된다.
- 조건식 ? 식1 : 식2 (삼항 연산자)
- 첫 번째 피연산자인 조건식의 평가결과에 따라 다른 결과를 반환.
- 조건식의 평가결과가 true이면 식1이, false이면 식2이 연산결과가 된다.
- 조건 연산자의 결합규칙은 오른쪽에서 왼쪽이다.
- 조건 연산자의 식1과 식2의 타입이 다른 경우, 이상 연산자처럼 산술 변환이 발생한다.
// x = 5, y = 3
result = (x > y) ? x : y ;
-> result = (5 > 3) ? 5 : 3 ;
-> result = (true) ? 5: 3; // 조건식이 true(참) 이므로 연산결과는 5
-> result = 5;
public void method1() {
int num = 0;
String result = "";
Scanner scanner = new Scanner(System.in);
System.out.print("정수값 입력 > ");
num = scanner.nextInt();
result = (num > 0) ? "양수이다." : (num == 0) ? "0 입니다," : "음수이다.";
System.out.printf("%d 는(은) %s", num, result);
scanner.close();
}
/*
* 실습 문제 1
*
* 사용자한테 두 개의 정수값을 입력받아서
* 두 정수의 곱셈 결과 100보다 큰 경우 "결과가 100 이상입니다." 아닌 경우 "결과가 100 보다 작습니다." 출력
*/
public void practice1() {
int num1 = 0;
int num2 = 0;
String result = null;
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 정수를 입력하시오 >");
num1 = scanner.nextInt();
System.out.print("두 번째 정수를 입력하시오 >");
num2 = scanner.nextInt();
result = (num1 * num2 >= 100) ? "결과가 100 이상입니다." : "결과가 100 보다 작습니다.";
System.out.printf("%d 는(은) %s\n", (num1 * num2), result);
scanner.close();
}
/*
* 실습 문제 2
*
* 사용자한테 문자를 하나 입력 받아서
* 입력한 문자가 대문자이면 "대문자이다." 아닌 경우 "알파벳 대문자가 아니다." 출력
*/
public void practice2() {
char ch = '\u0000';
String result = null;
Scanner scanner = new Scanner(System.in);
System.out.print("영문자를 입력하시오 > ");
ch = scanner.nextLine().charAt(0);
result = (ch >= 'A') && (ch <='Z') ? "알파벳 대문자이다." : "알파벳 대문자가 아니다.";
System.out.printf("%c 는(은) %s\n", ch, result);
scanner.close();
}
/*
* 실습 문제 3
* 두 정수를 입력받고 + 또는 -를 입력받아서 계산을 출력하라
* 단, + 또는 - 외의 문자를 입력하는 경우 "잘못 입력했습니다." 출력
*
* 예시)
* 첫 번째 수 > 3
* 두 번째 수 > 4
* 연산자 입력 (+ 또는 -) > +
*
* 3 + 4 = 7
*/
public void practice3() {
int num1 = 0;
int num2 = 0;
char op = '\u0000';
String result = null;
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 수 > ");
num1 = scanner.nextInt();
System.out.print("두 번째 수 > ");
num2 = scanner.nextInt();
scanner.nextLine(); // 버퍼 한번 비우는거 잊지말자 !!!
System.out.print("연산자 입력(+ 또는 -) > ");
op = scanner.nextLine().charAt(0);
// 정수값과 빈 문자열("")을 + 연산하여 문자열로 변경한다.
// String.valueOf() 메소드는 기본 자료형의 값들을 문자열로 변경한다.
result = (op == '+') ? String.valueOf(num1 + num2) : (op == '-') ? String.valueOf(num1 - num2) : "잘못 입력했습니다.";
// result = (op == '+') ? (num1 + num2) + "" : (op == '-') ? (num1 - num2) + "" : "잘못 입력했습니다.";
System.out.println();
System.out.printf("%d %c %d = %s", num1, op, num2, result);
scanner.close();
}
1) lvalue와 rvale
- 대입 연산자의 왼쪽을 ‘lvalue(left value)’이라 하고 , 오른쪽 피연산자를 ‘rvalue(right value)’라고 한다.
- rvalue는 변수뿐만 아니라 식이나 상수 등이 모두 가능하다
- lvalue는 반드시 변수처럼 값을 변경할 수 있는 것이어야 한다. 리터럴이나 상수같이 값을 저장할 수 없는 것들은 될 수 없다.
2) 복합 대입 연산자
- 대입 연산자는 다른 연산자(op)와 결합하여 ‘op=’와 같은 방식으로 사용될 수 있다.
- 복합 대입 연산
- 다른 연산자와 대입 연산자를 함께 사용하는 연산자이다.
- 내부적으로 연산 처리 속도가 빠르므로 사용을 권장한다.
- 증감 연산자 (++, --)와 비슷해 보이지만 증감 연산자는 1씩 증감이 되고 복합 대입 연산자는 내가 원하는 숫자만큼 값을 증감 시킬 수 있다.
public class F_Compound {
/*
* ex)
* a += 3; -> a = a + 3;
* a -= 3; -> a = a - 3;
* a *= 3; -> a = a * 3;
* a /= 3; -> a = a / 3; // 몫 연산
* a %= 3; -> a = a % 3; // 나머지 연산
*/
public void method1() {
int num = 12;
String str = "Hello";
num += 3; // num = num + 3
System.out.println("num += 3 는(은) " + num);
num -=5; // num = num - 5;
System.out.println("num -= 5 는(은) " + num);
num *=6; // num = num * 6;
System.out.println("num *= 6 는(은) " + num);
num /=3; // num = num / 3;
System.out.println("num /= 3 는(은) " + num);
num %=4; // num = num % 4;
System.out.println("num %= 4 는(은) " + num);
str +="World"; // str = str + "World";
System.out.println("str += \"World\" 는(은) " + str); // \" escape 문자
str += 123; // str = str + 123;
System.out.println("str += 123 는(은) " + str);
}
}
'Java' 카테고리의 다른 글
조건문(conditional statements) - if & switch (0) | 2022.08.19 |
---|---|
반복문(iteration statements) - for & while & do-while (0) | 2022.08.19 |
연산자(Operator) - 산술 연산자 & 비교 연산자 (0) | 2022.08.17 |
연산자(Operator) - 연산자(operator) & 단항 연산자 (0) | 2022.08.17 |
변수(Variable) - 형변환 (0) | 2022.08.16 |