티스토리 뷰

IT/Java

단항 연산자 (2)

오예봉봉 2020. 4. 13. 17:08

논리 부정 연산자

이 연산자는 기호는 느낌표(!)를 사용하고 참(true)을 거짓(false)으로 거짓을 참으로 바꾸어 준다. boolean 타입의 자료형에서 사용한다. 조건문과 제어문에서 주로 논리 부정 연산자를 사용하여 프로그램의 실행 흐름을 제어 한다. 즉 피 연산자가 true 이면 false 값이 나오고 피 연산자가 false 이면 true 값을 산출 해 준다.
예제 코드를 보자

 public class Example {

public static void main(String [ ] args) { 

boolean a = true;
System.out.println(a);

a = !a;
System.out.println(a);

a = !a;
System.out.println(a);
}
}


논리 부정 연산자를 사용한 위 예제 코드의 실행 결과는 다음과 같다. 

true

false

true


비트 반전 연산자 



이 연산자는 기호는 ~ 를 사용한다. 비트 반전 연산자의 피 연산자는 정수 타입(byte , short , int , long)만 가능하다. 왜냐하면 , 비트 연산자는 데이터를 비트(bit)단위로 연산하기 때문에 0 과 1 이 피연산자가 된다. 따라서 0과 1로 표현이 가능한 정수 타입만 비트 연산을 할 수 있다.
이러한 비트 반전 연산자는 피 연산자를 2진수로 바꾸었을 경우 비트 값인 0 을 1로 1은 0으로 반전 시켜 준다. 최상위 비트인 부호 비트를 포함한 모든 비트를 반전 시키므로 부호가 반대인 새로운 값이 나오게 된다.

int variable = 10 ;
int result = ~ variable ;

위 코드에서 result 값은 -11이 나온다. 정수 10을 2진수로 바꾸면 00....01010 이 나온다. 이것을 비트 반전 시키면 11...10101 이다.
이 연산자를 사용할 경우에는 주의 해야 할 점이 있다. 비트 반전 연산자의 결과 값은 int 타입이라는 것이다. (부호 연산자의 주의 사항과 동일하다.) 연산이 수행되기 전에 피 연산자는 int 타입으로 변환된다. 그리고 나서 비트 반전이 발생한다. 컴파일 에러가 나오지 않도록 하기 위해서 다음 예제 코드를 보자.

1. byte variable = 10 ;
2. byte result = ~ variable ;

 1행의 변수 variable이 2행에서 비트 반전 연산 과정에서 int 로 타입 변환이 발생 했으므로 2행과 같이 byte 타입으로 값을 받는다면 컴파일 에러가 생긴다. 따라서 아래와 같이 변경 해야 에러가 없다.

byte variable = 10 ;
int result = ~ variable ;

일반적으로 부호가 반대인 정수를 구하는 방법은 두 가지가 있다.
첫째 ,  부호 연산자인 - 를 사용하는 것이다.
둘째 , 비트 반전 연산자를 이용한 방법이다. 비트 반전 연산자로 얻은 값에 1을 더하여 주는 것이다.

byte variable = 10 ;
int result = ~ variable + 1 ;

10을 비트 반전 시키면 -11 이 나온다. 위 코드에서 ~variable 의 값이 -11 이므로 여기에 1을 더하여 주면 부호가 반대인 정수 -10 을 얻을 수 있다.
 


'IT > Java' 카테고리의 다른 글

문자열 결합 연산자  (0) 2020.04.15
산술 연산자  (0) 2020.04.14
단항 연산자 (1)  (0) 2020.04.12
연산의 순서와 방향  (0) 2020.04.11
자바 연산자  (0) 2020.04.10