19.11.21. 논리연산자, 그 외 연산자.
베이직자바
2019-11-22 00:17:40
▶논리 연산자
- &&(AND) : 피연산자 둘 다 true 이면 true를 결과로 얻는다.
- ||(OR) : 피연산자 중 하나라도 true 이면 true를 결과로 얻는다.
- ! (NOT) : 피연산자가 true 이면 false 를, false 이면 true 를 결과로 얻는다.
- 피연산자로 boolean 만 허용한다.
*&&가 ||보다 우선순위가 높다!
* 논리연산자는 효율적인 계산을 함. 왼쪽에서 결과가 정해지면 오른쪽은 수행하지 않음.
int d = 10;
b = d < 10 && 0 < d++;
System.out.println(d);
=> 왼쪽에서 이미 false 가 되었기에 오른쪽의 d++은 실행되지 않아 d의 값이 변하지 않는다.
*연산의 우선순위
산술 연산 > 비교 연산 > 논리 연산
▶비트 연산자
비트 : '1바이트가 8개의 비트이다.' 할 때 비트. 0 혹은 1을 표현할 수 있다.
비트연산자 : 0 혹은 1로 연산을 한다.
- | (OR) : 피연산자 중 한쪽이라도 값이 1이면, 1을 . 그 외에는 0을 결과로 얻는다.
- & (AND) : 피연산자 양 쪽이 모두 1이어야만 1을, 그 외는 0을 결과로 얻는다.
- ^ (XOR) : 피연산자의 값이 서로 다를 때만 1을, 같을 때에는 0을 결과로 얻는다.
- ~ (비트전환) : 피연산자를 0은 1로, 1은 0으로 바꾼다.
- << (쉬프트) : 피연산자의 각 자리를 왼쪽으로 이동시킨다. 빈칸은 0으로 채운다.
- >> (쉬프트) : 피연산자의 각 자리를 오른쪽으로 이동시킨다.
빈칸은 앞자리와 동일한 값으로 채운다.
1바이트는 8비트로 이루어져있고, 1비트는 0 또는 1을 표현할 수 있다.
즉, 1 바이트는 8개의 0또는 1을 표현할 수 있다. (8자리)
* 10진수를 2진수로 바꾸는 방법 : 10진수 값을 1이 될 때까지 2로 나눈다.
Q : 10을 2진수로 바꿔보자.
5...0
2...1
1...0
답 : 1010. ㄴ 의 좌우대칭 순서로 읽어온다. 1바이트로 표현하면 00001010
* 2진수를 10진수로 바꾸는 방법 : 1의 자리부터 각 자리에 1,2,4,8,16,32...를 곱한 값을 더한다.
Q : 1010을 10진수로 바꿔보자.
1 0 1 0
X 8 4 2 1
= 8 + 0 + 2 + 0
답 : 10. 마지막 줄을 모두 더한다.
▶기타 연산자
- .(참조연산자) : 특정 범위 내에 속해 있는 멤버를 지칭할 때 사용한다.
클래스 내의 메서드를 부를 때 사용.
- (type) : 형 변환(casting)
- ?: (삼항 연산자) : 조건식? 조건식이 참일 경우 수행할 문장 : 조건식이 거짓일 경우 수행할 문장.
- instanceof : 참조형 타입 확인
예시)
00001010 : 10
00001111 : 15
위 두 숫자의 |(OR) 연산의 결과 : 00001111 = 15네
System.out.println(10 | 15); //15
& (AND) 연산의 결과 : 00001010 = 10
System.out.println(10 & 15); //10
^(XOR) 연산의 결과 : 00000101 :
System.out.println(10 ^ 15); //5
~(비트 전환) 연산의 결과(10을 가지고 해 보자) : 11110101
System.out.println(~10); //-11
//2진수의 맨 왼쪽 자리가 1이면 음수, 0이면 양수다. 그런데 음수면 읽는 방식이 좀 달라짐.
<< (시프트) 연산(10으로 해보자) : 00010100
System.out.println(10 << 1); //20
10 을 시프트 연산하는데, 왼쪽으로 1 칸 이동하라는 뜻.
>> (시프트) 연산(10으로 해보자) : 00000101
System.out.println(10 >> 1); //5
?: (삼항 연산자) 연산의 결과 :
int x = 10;
int y = 20;
int result = x < y ? x : y;
//true : int result = x
//false : int result = y
System.out.println(result); //10 true 기때문.
Q : 변수에 저장된 주민등록번호 뒷자리의 첫 번째 숫자가 1이나 3이면 '남자'를,
2 나 4면 '여자'를 출력해주세요. 그 외의 숫자는 '확인불가'를 출력해 주세요.
int n = 2;
String r = n == 1 || n == 3 ? "남자" : (n == 2 || n == 4 ? "여자" : "확인 불가");
System.out.println("당신의 성별은 '" + r + "'입니다.");
'Java' 카테고리의 다른 글
java - 배열 Array (0) | 2023.03.13 |
---|---|
java - 반복문 Repetitive Statement (0) | 2023.03.13 |
java - 조건문 Conditional Statement, import (0) | 2023.03.13 |
java - 산술연산자, 비교연산자 (0) | 2023.03.13 |
java - CLASS, 데이터 타입, 리터럴 종류, 형변환 (0) | 2023.03.13 |