Java

[Java] 연산자

ruming 2021. 10. 17. 04:38

연산자 종류

증감 ++ -- 비트 & | ^ ~
산술 + - * / % 논리 && || ! ^
시프트 >> << >>> 조건 ? :
비교 > < >= <= == != 대입 = *= /= += -= &= ^= |= <<= >>= >>>=

 

연산자 우선순위

연산자 우선순위

같은 우선순위의 연산자 

- 왼쪽에서 오른쪽으로 처리

예외) 오른쪽에서 왼쪽

- 대입 연산자, --, ++, +, - (양수 음수 부호), !, 형 변환

 

괄호는 최우선 순위(가장 안쪽의 괄호부터)

 

비트 연산

비트 논리 연산

- 비트끼리 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장