[Java] 연산자 ( & , | , ~ , ! )에 대한 이야기

연산자 ( & , | , ~ , ! )에 대한 이야기





논리 연산자중에 AND 를 의미하는 '& ' 와 '&&'가 OR를 의미하는 ' | ' 와 ' || '보다 우선순위가 높다.

 

우선순위 : &  > ||


 AND와 OR가 함께 사용되는 경우에는 괄호를 사용해서 운선순위를 명확히 하는것이 좋다.

 

 




비트전환 연산자   ' ~ ' 는 정수형과 char형에만 사용될 수 있다.

피연산자를 2진수로 표현했을 때, 0은 1로 1은 0으로 바꾼다.

 

                                                    

   2진수

      10진수    

 0

0

0

 10

 1

1

0

0

1

 -11

 

그래서 연산자 ' ~ ' 에 의해 비트전환 되고 나면, 피연산자의 부호가 반대로 변경된다.

 

public static void main(String[] args) { byte b = 10; System.out.println ("a = " + a); System.out.println ("~a = " + ~a); System.out.println ("~a+1 = " + (~a+1); }

출력 결과


a = 10;

~a= -11;

~a+1 = -10;



따라서, 양수를 음수로 바꾸고 싶을땐?


~변수+1 '

 

연산자 '~ '는 피연산자의 타입이 int형 보다 작으면, int형으로 변환한 다음에 연산을 하기 때문에

연산결과를 저장하고 싶다면

int형 변수에 담거나, 캐스트 연산자를 사용해야한다.

 

public static void main(String[] args)
{
    byte a= 1;
    
    //'~'연산의 결과가 int형이라서 byte형 변수에 저장할 수 없다.
    //byte result = ~a;
 
    // 이렇게 캐스트 연산자를 사용하던지 해야함.
    byte result = (byte) ~a;              
}




논리부정 연산자 ' ! '

 

boolean형에만 사용할 수 있으며, 토글버튼(toggle button)을 논리적으로 구현할 수 있다.

 

ex>

boolean power = false;

power = !power;