728x90
반응형
비교(관계) 연산자
- 두 피연산자 간의 대소 관계 비교를 수행하는 연산자
- 연산 수행 결과는 true 또는 false 값으로 나타냄
- => 연산 결과를 출력문에서 출력하거나, boolean 타입 변수에 저장
- == (동등 비교 연산자) : 두 피연산자가 같은지 비교
- != (Not Equal) : 두 피연산자가 같지 않은지(다른지) 비교
- >, >=, <=, < : 두 피연산자의 대소 관계 비교
int a = 10, b = 4;
System.out.println(a == b); // a 와 b 가 같은지 판별 결과 출력
// => a 와 b 는 같지 않으므로 false 가 리턴되어 출력됨
System.out.println(a != b); // a 와 b 가 다른지 판별
// => a 와 b 는 다르므로(같지 않으므로) true 가 리턴되어 출력됨
System.out.println(a > b); // a 가 b 보다 큰지 판별
// => a 가 b 보다 크므로 true 가 리턴되어 출력됨
System.out.println(a >= b); // a 가 b 보다 크거나 같은지 판별
// => a 가 b 보다 크거나 같으므로 true 가 리턴되어 출력됨
System.out.println(a <= b); // a 가 b 보다 작거나 같은지 판별
// => a 가 b 보다 작거나 같지 않으므로 false 가 리턴되어 출력됨
System.out.println(a < b); // a 가 b 보다 작은지 판별
// => a 가 b 보다 작으므로 false 가 리턴되어 출력됨
// 대소 관계 비교 결과를 boolean 타입 변수에 저장할 수 있다!
boolean result = a > b; // a > b 판별 결과가 result 에 저장됨
System.out.println("result = " + result);
// 산술 연산자 등과 결합하여 사용할 수 도 있다!
// => 두 연산 결과를 비교연산자로 비교 가능
// boolean result2 = a + b > a - b;
// => 산술연산자가 비교연산자보다 우선순위가 높으므로
// 별도의 괄호를 표시하지 않아도 산술연산을 먼저 수행함
// 만약, 명확하게 산술연산을 먼저 수행하도록 하려면 괄호 표시!
boolean result2 = (a + b) > (a - b); // 위의 코드와 결과 동일
System.out.println(result2);
// char 타입도 정수이므로 비교연산자 사용 가능
char ch = 'C';
System.out.println("ch 가 대문자 A 보다 큰가? " + (ch > 65));
System.out.println("ch 가 대문자 A 보다 큰가? " + (ch > 'A'));
// 비교연산자도 피연산자 타입이 다르면 일치시킨 후 연산 수행
System.out.println(10 == 10.0);
// => int == double => double == double 로 변환 후 수행(10.0 == 10.0)
// 주의사항!
// 실수(특히 double) 0.1 의 유효자릿수 문제때문에
// float 0.1f 와 double 0.1 비교 시 문제 발생! (= 부정확)
System.out.println(0.1 == 0.1f); // false 출력됨
float f = 0.1f;
double d = 0.1;
System.out.println(f == d); // false 출력됨
// => float, double 타입 비교 시 반드시 float 타입으로 일치시킨후
// 비교 연산을 수행해야한다!
System.out.println(f == (float)d);
논리 연산자(&&, ||, !, ^)
- 두 피연산자 간의 논리적인 판별을 수행하는 연산자
- 피연산자는 모두 boolean 타입 데이터만 사용 가능하며, 결과값도 boolean 타입으로 리턴
- 주로 비교(관계)연산자 등과 결합하여 사용
- AND : 두 비교 연산의 관계를 ~이고, ~이면서, 그리고 로 정의
- OR : 두 비교 연산의 관계를 ~이거나, 또는 으로 정의
- Short Circuit Operation 을 위한 && 또는 || 연산자를 통해 연산 과정을 짧게 줄일 수도 있음
AND 연산자(& 또는 &&) - 논리곱
- 두 피연산자가 모두 true 일 경우에만 결과값이 true 이고, 하나라도 false 일 경우 결과값이 false
- F AND F = F, F AND T = F, T AND F = F, T AND T = T
- & 와 && 의 차이점뒤의 피연산자 검사를 생략하고 결과를 바로 false 로 리턴
- 즉, 연산 과정이 짧아짐
- && 연산자는 두 피연산자 중 앞의 피연산자가 false 일 경우
OR 연산자(| 또는 ||) - 논리합
- 두 피연산자 중 하나라도 true 일 경우 결과값이 true 이고, 모두 false 일 경우에만 결과값이 false
- F OR F = F, F OR T = T, T OR F = T, T OR T = T
- | 와 || 의 차이점뒤의 피연산자 검사를 생략하고 결과를 바로 true 로 리턴
- 즉, 연산 과정이 짧아짐
- || 연산자는 두 피연산자 중 앞의 피연산자가 true 일 경우
NOT 연산자(!) - 논리부정
- 단항 연산자로, 현재 값을 반대로 반전시킴
- F -> T, T -> F
XOR 연산자(^) - 배타적 논리합(배타적 OR)
- 두 피연산자가 서로 다를 때 true, 같을 때 false
- F XOR F = F, F XOR T = T, T XOR F = T, T XOR T = F
boolean a = false, b = true;
System.out.println("a && a = " + (a && a));
System.out.println("a && b = " + (a && b));
System.out.println("b && a = " + (b && a));
System.out.println("b && b = " + (b && b));
System.out.println("--------------------");
System.out.println("a || a = " + (a || a));
System.out.println("a || b = " + (a || b));
System.out.println("b || a = " + (b || a));
System.out.println("b || b = " + (b || b));
System.out.println("--------------------");
System.out.println("a ^ a = " + (a ^ a));
System.out.println("a ^ b = " + (a ^ b));
System.out.println("b ^ a = " + (b ^ a));
System.out.println("b ^ b = " + (b ^ b));
System.out.println("--------------------");
System.out.println("!a = " + !a); // false -> true
System.out.println("!b = " + !b); // true -> false
반응형
비교 연산자와 결합하여 사용하는 경우
int num = 8;
// 한 가지 비교만 수행하는 경우 비교연산자만 사용 가능
// 정수 num 이 5보다 큰가?
// boolean result = num > 5;
// System.out.println("num 이 5보다 큰가? " + result);
// 두 가지 이상의 비교를 조합해야 하는 경우 논리연산자와 결합 필요
// AND : 두 비교 연산의 관계를 ~이고, ~이면서, 그리고 로 정의
// 정수 num 이 5보다 크고, 정수 num 이 10보다 작거나 같은가?
// 1) 정수 num 이 5보다 크다 : num > 5
// 2) 정수 num 이 10보다 작거나 같다 : num <= 10
// => ~이고, 그리고 가 포함되므로 두 연산을 AND연산(&&)으로 묶음
boolean result = num > 5 && num <= 10;
System.out.println(
"num 이 5보다 크고, 10보다 작거나 같은가? " + result);
// OR : 두 비교 연산의 관계를 ~이거나, 또는 으로 정의
// 정수 num 이 5보다 작거나, 또는 num 이 10보다 큰가?
// => 두 연산 중 하나라도 만족하면 결과가 true
num = 15;
result = num < 5 || num > 10;
System.out.println(
"num 이 5보다 작거나, 10보다 큰가? " + result);
비교 연산자와 논리 연산자를 활용한 char 타입 연산
- char 타입은 주로 비교 연산자와 논리 연산자를 활용하여 특정 범위 내의 문자인지를 판별하는 용도로 사용
삼항연산자(조건연산자) ?:- 피연산자(항)가 3개인 연산자
- ? 앞의 조건식에 따라 : 앞 뒤의 문장을 선택하는 연산자
- 뒤에 나올 if ~ else 문의 역할과 동일한 작업을 수행
조건식은 연산 결과가 true 또는 false 인 식만 올 수 있다!삼항연산자 연산 결과를 변수에 대입하거나, 출력문 등에 결합하여 사용할 수 있다삼항연산자의 중첩 사용- 기본 삼항연산자는 두 가지 경우의 수를 판별할 수 있으나 세 가지 경우 이상은 판별이 불가능하다
- 이 때, 삼항연산자를 중첩해서 사용하면 두 가지 이상의 경우의 수를 판별할 수 있다.
- 조건식1 ? 값1 : 조건식2 ? 값2 : 값3;
- 조건식 결과가 true 이면 값1 을 선택하고, 조건식 결과가 false 이면 값2 를 선택
- 조건식 ? 값1 : 값2;
- ex) 대문자 판별, 소문자 판별, 영문자 판별, 숫자 판별 등
char ch = '1';
boolean result = ch >= 'A'; // ch >= 65 사용 가능
System.out.println(ch + " 이(가) 대문자 A(65) 이상인가? " + result);
result = ch <= 'Z'; // ch <= 90 사용 가능
System.out.println(ch + " 이(가) 대문자 Z(90) 이하인가? " + result);
// 문자 ch 가 대문자인지 판별
// => 대문자란? 'A'(65) 보다 크거나 같고, 'Z'(90) 보다 작거나 같음
// => 같'고' 의 조건은 AND 연산자인 && 를 사용하여 결합
result = ch >= 'A' && ch <= 'Z';
System.out.println(ch + " 이(가) 대문자인가? " + result);
// 문자 ch 가 소문자인지 판별
// => 소문자란? 'a'(97) 보다 크거나 같고, 'z'(122) 보다 작거나 같음
ch = 'r';
result = ch >= 'a' && ch <= 'z';
System.out.println(ch + " 이(가) 소문자인가? " + result);
// 문자 ch 가 영문자인지 판별
// => 영문자란? 대문자 또는 소문자
ch = 'r';
result = (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z');
System.out.println(ch + " 이(가) 영문자인가? " + result);
// 문자 ch 가 숫자인지 판별
// => 숫자란? '0'(48) ~ '9'(57)
ch = '0';
// result = ch >= '0' && ch <= '9';
// result = ch >= 48 && ch <= 57;
result = !(ch < 48) && !(ch > 57);
System.out.println(ch + " 이(가) 숫자인가? " + result);
int num = 1;
System.out.println(
num >= 10 ? "num 이 10 이상이다!" : "num 이 10 이상이 아니다!");
// => num 이 10 이상(true)일 때 "num 이 10 이상이다" 문장을 선택하여
// 출력문에 사용하므로 "num 이 10 이상이다" 문장이 출력되고,
// => num 이 10 이상이 아닐(false) 때
// "num 이 10 이상이 아니다!" 문장을 선택하여
// 출력문에 사용하므로 "num 이 10 이상이 아니다!" 문장이 출력됨
String result = num >= 10 ? "10 이상이다!" : "10 이상이 아니다!";
System.out.println(result);
System.out.println("--------------------");
num = 20;
System.out.println("num 이 10보다 큰가? " + (num > 10));
// num 이 10보다 크면 정수형 변수 result2 의 값에 1을 더하고
// 아니면, 정수형 변수 result2 의 값에 10을 더하기
int result2 = 0;
// result2 = result2 + 1;
// result2 = result2 + 10;
// result2 = num > 10 ? result2 + 1 : result2 + 10;
result2 += num > 10 ? 1 : 10;
// => true 와 false 일 때 선택할 문장 부분에 연산식이 올 수도 있으나
// 해당 식을 사용하여 값을 할당하는 문장에 사용해야함
System.out.println(result2);
int a = 10, b = 4;
System.out.println(a == b); // a 와 b 가 같은지 판별 결과 출력
// => a 와 b 는 같지 않으므로 false 가 리턴되어 출력됨
System.out.println(a != b); // a 와 b 가 다른지 판별
// => a 와 b 는 다르므로(같지 않으므로) true 가 리턴되어 출력됨
System.out.println(a > b); // a 가 b 보다 큰지 판별
// => a 가 b 보다 크므로 true 가 리턴되어 출력됨
System.out.println(a >= b); // a 가 b 보다 크거나 같은지 판별
// => a 가 b 보다 크거나 같으므로 true 가 리턴되어 출력됨
System.out.println(a <= b); // a 가 b 보다 작거나 같은지 판별
// => a 가 b 보다 작거나 같지 않으므로 false 가 리턴되어 출력됨
System.out.println(a < b); // a 가 b 보다 작은지 판별
// => a 가 b 보다 작으므로 false 가 리턴되어 출력됨
// 대소 관계 비교 결과를 boolean 타입 변수에 저장할 수 있다!
boolean result = a > b; // a > b 판별 결과가 result 에 저장됨
System.out.println("result = " + result);
// 산술 연산자 등과 결합하여 사용할 수 도 있다!
// => 두 연산 결과를 비교연산자로 비교 가능
// boolean result2 = a + b > a - b;
// => 산술연산자가 비교연산자보다 우선순위가 높으므로
// 별도의 괄호를 표시하지 않아도 산술연산을 먼저 수행함
// 만약, 명확하게 산술연산을 먼저 수행하도록 하려면 괄호 표시!
boolean result2 = (a + b) > (a - b); // 위의 코드와 결과 동일
System.out.println(result2);
// char 타입도 정수이므로 비교연산자 사용 가능
char ch = 'C';
System.out.println("ch 가 대문자 A 보다 큰가? " + (ch > 65));
System.out.println("ch 가 대문자 A 보다 큰가? " + (ch > 'A'));
// 비교연산자도 피연산자 타입이 다르면 일치시킨 후 연산 수행
System.out.println(10 == 10.0);
// => int == double => double == double 로 변환 후 수행(10.0 == 10.0)
// 주의사항!
// 실수(특히 double) 0.1 의 유효자릿수 문제때문에
// float 0.1f 와 double 0.1 비교 시 문제 발생! (= 부정확)
System.out.println(0.1 == 0.1f); // false 출력됨
float f = 0.1f;
double d = 0.1;
System.out.println(f == d); // false 출력됨
// => float, double 타입 비교 시 반드시 float 타입으로 일치시킨후
// 비교 연산을 수행해야한다!
System.out.println(f == (float)d);
728x90
반응형
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[JAVA] 자바의 반복문 for & while (0) | 2021.01.18 |
---|---|
[JAVA] 조건문 if & switch (0) | 2021.01.18 |
[JAVA] 자바의 연산자 (0) | 2021.01.18 |
[JAVA] 자바의 형변환 Type Casting (0) | 2021.01.18 |
[JAVA] 자바의 변수와 상수 (Variable & Literal) (0) | 2021.01.18 |