연산자 종류
증감 | ++ -- | 비트 | & | ^ ~ |
산술 | + - * / % | 논리 | && || ! ^ |
시프트 | >> << >>> | 조건 | ? : |
비교 | > < >= <= == != | 대입 | = *= /= += -= &= ^= |= <<= >>= >>>= |
연산자 우선순위
같은 우선순위의 연산자
- 왼쪽에서 오른쪽으로 처리
예외) 오른쪽에서 왼쪽
- 대입 연산자, --, ++, +, - (양수 음수 부호), !, 형 변환
괄호는 최우선 순위(가장 안쪽의 괄호부터)
비트 연산
비트 논리 연산
- 비트끼리 AND, OR, XOR, NOT 연산
a & b | AND | 두 비트 모두 1이면 1, 그렇지 않으면 0 |
a | b | OR | 두 비트 모두 0이면 0, 그렇지 않으면 1 |
a ^ b | XOR | 두 비트가 다르면 1, 같으면 0 |
~a | NOT | 1을 0으로, 0을 1로 변환 |
AND
0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | |
& | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 |
0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
비트 논리 연산 응용
냉장고에는 8개의 센서가 있고 flag변수와 연결되어 있다고 할 때, 냉장고의 온도가 0도 이상으로 올라가면 비트 3이 1이 되고, 0도 이하이면 비트 3이 0을 유지한다.
flag
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
→ 0도 이상
현재 냉장고의 온도가 0도 이상인지 판단하는 코드
public class HelloJava {
public static void main(String[] args) {
byte flag = 0b00001010; // 각 비트는 8개의 센서 값을 가리킴
if((flag & 0b00001000) == 0)
System.out.print("온도는 0도 이하");
else
System.out.print("온도는 0도 이상");
}
}
비트 시프트 연산
- 비트를 오른쪽이나 왼쪽으로 이동
시프트 연산자의 사례
a >> b | a의 각 비트를 오른쪽으로 b번 시프트한다. 최상위 비트의 빈자리는 시프트 전의 최상위 비트로 다시 채운다. 산술적 오른쪽 시프트 |
a >>> b | a의 각 비트를 오른쪽으로 b번 시프트한다. 최상위 비트의 빈자리는 항상 0으로 채운다. 논리적 오른쪽 시프트 |
a << b | a의 각 비트를 왼쪽으로 b번 시프트한다. 최하위 비트의 빈자리는 항상 0으로 채운다. 산술적 왼쪽 시프트 |
byte a = 5;
byte b = (byte)(a << 2); //20
*명품 자바프로그래밍 2장
'Java' 카테고리의 다른 글
[Java] 타입 변환, 입력 스트림, Scanner, 원의 넓이 구하기 (0) | 2021.10.16 |
---|---|
[Java] 데이터 타입, 변수, 상수, 리터럴 (0) | 2021.10.16 |
[Java] 자바 프로그래밍 기초, 식별자, 키워드 (0) | 2021.10.16 |
[Java] 자바 프로그래밍 기초 - 메모장으로 코딩하기 (0) | 2021.10.16 |