일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 코드업100제자바
- 코딩테스트
- Codeup
- 백준파이썬
- 개발입문
- 백준
- 리터럴
- SWEA
- 자바연산자
- 사용자입력
- C#변수
- C#프로그래밍
- 코드업자바
- 자바
- 변수
- c#
- 자바클래스
- 프로그래머스파이썬
- 제어구조
- Algorithm
- Java
- 수학연산
- 알고리즘
- Literal
- 코드업100제
- 디자인패턴
- 코드업
- 기초프로그래밍
- VARIABLE
- SWEA파이썬
- Today
- Total
제니노트
논리 연산자, 논리 부정 연산자 [자바] 본문
논리 연산자
두 개의 조건이 결합된 경우에 사용하는 것이 논리 연산자이다.
논리 연산자 - &&,||,!
|| (OR 결합) : 피연산자 중 어느 한 쪽만 true 이면 true를 결과로 얻는다.
&&(AND결합) : 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다.
x | y | x||y | x&&y |
true | true | true | true |
true | false | true | false |
false | true | true | false |
false | false | false | false |
x&&y : 둘 다 참일 때만 true, 나머지는 false
1) x는 10보다 크고, 20보다 작다.
'x>10'와 'x<20'가 그리고(and)로 연결된 조건이다.
x>10 && x<20
'x>10'는 '10<x'와 같다. 따라서
10 < x && x < 20
위와 비교하면 왼,오른쪽만 바뀐 것이다.
어느쪽이라도 상관은 없지만, 가독성 측면에서 위의 식이 더 나을 수 있다.
하지만 10<x<20 과 같이 표기하는 것은 허용되지 않는다.
2) i는 2의 배수 또는 3의 배수이다.
i%2 == 0 || i%3 == 0
i의 값이 8이라고 가정하면,
8%2 == 0 || 8%3 == 0
0 == 0 || 2==0
true || false
true
3) i는 2의 배수 또는 3의 배수지만 6의 배수는 아니다.
( i%2==0 || i%3 == 0 ) && i%6 != 0
위의 식에 괄호를 사용한 이유는 &&가 || 보다 우선순위가 더 높기 때문이다.
하나의 식에 &&와 ||가 같이 포함된 경우, &&가 먼저 연산되어야하는 경우라도 괄호를 사용해서 우선순위를 명확히 해주는 것이 좋다.
4) 문자 (ch) 는 숫자 ('0'~'9') 이다.
'0' <= ch && ch <= '9'
유니코드는 문자 '0'부터 '9'까지 연속적으로 배치되어 있기 때문에 이가 가능하다.
0 은 48, 9는 57이다.
만약 ch가 '5'라고 가정하면
'0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' |
48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 |
'0' <= '5' && '5' <= '9'
는
48 <= 53 && 53 <= 57 로 표현되므로 true&&true = true 의 결과가 나오는 것이다
5) 문자 ch는 대문자 또는 소문자이다.
a~z, A~Z 또한 연속적으로 배치되어 있으므로 다음과 같이 식을 쓸 수 있다.
('a'<=ch && ch <= 'z') || ('A'<=ch && ch <= 'Z')
논리 부정 연산자 !
피연산자가 true 이면 false를, false면 true를 결과로 반환.
x | !x |
true | false |
false | true |
'문자 ch는 소문자가 아니다'를 논리 부정 연산자로 표시하면 이해하기 쉬워진다.
일반식으로 표현하면
ch < 'a' || ch > 'z'
소문자를 확인 하는 식은
'a' <= ch && and ch <='z' 였다.
여기에 !('a' <= ch && and ch <='z') 를 하면 소문자가 아닌 식을 판별할 수 있다.
public class ScanfEx1 {
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("!(ch < 'a' || ch > 'z') = %b\n",!('a'<=ch && ch <= 'z'));
System.out.printf(" 'a'<=ch && ch<='z' = %b%n" , 'a'<=ch && ch<='z');
}
}
!!b가 평가되는 과정은 이러하다
!!b
!!true 가까운 연산자가 먼저 연산됨
!false !true의 결과를 false이다.
true !false의 결과는 true다.
참고 : https://www.youtube.com/watch?v=AdFrJizyF80&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=30
'Java > Java 입문' 카테고리의 다른 글
연산자 정리 [자바] (0) | 2023.07.21 |
---|---|
비교 연산자,문자열의 비교 [자바] (0) | 2023.06.23 |
반올림 Math.round(),나머지 연산자 [자바] (0) | 2023.06.10 |
사칙 연산자, 산술 변환 [자바] (0) | 2023.06.10 |
형변환 연산자, 자동 형변환 [자바] (0) | 2023.06.09 |