본문 바로가기

Java 기본 문법 - 참조 서적 [이것이 자바다 - 한빛미디어]/1. 변수, 기본 데이터 타입, 연산자

5. Java 자바 - 단항 연산자

1. 부호 연산자 ( + , - )

 

부호 연산자의 산출 타입은 int 형이다!!

 

short s = 100;

short result = -s;     // X 컴파일 에러!

int result = -s          // O  (-100)

 

public class SignOperatorExam {
	public static void main(String[] args) {
    	int x = -100;
        int result1 = +x  
        int result2 = -x 
        
        System.out.println("result1 = "+result1);  // -100
        System.out.println("result2 = "+result2);  // 100
        
        short s = 100;
        //short result3 = -s;   //컴파일 에러!
        int result3 = -s;
        System.out.println("result3 = "+result3);   // -100
    }
}        

 

 

2. 증감 연산자 ( ++, -- )

 

변수의 값을 1 증가 (++) 시키거나, 1 감소 (--) 시키는 연산자

boolean 타입 제외한 모든 기본 타입의 피연산자에 사용 가능

 

++num;   // 다른 연산 수행하기 전에 피연산자 num 값을 1 증가

--num;     // 다른 연산 수행하기 전에 피연산자 num 값을 1 감소

num++;   // 다른 연산 수행 후, 피연산자 num 값을 1 증가

num--;     // 다른 연산 수행 후, 피연산자 num 값을 1 감소

 

int num1 = 1;

int num2 = 1;

int result1 = ++num1 + 10;      // result1 는 12, num1이 먼저 증가되어 2가 된다.

int result2 = num2++ + 10;      // result2 는 11, num2가 증가 전 1 + 10 이 result2에 대입된다.

                                                       대입 이후 num2는 2가 된다.

 

 

 * 참고

 

 ++ i 와 i = i + 1 과 연산 속도는 같다!

 연산자가 2 개인 i = i + 1 이 속도가 느릴 것 같지만, 바이트 코드로 변환 시 같은 코드로 변환되기 때문

 

 

3. 논리 부정 연산자 ( ! )

 

true 를 false 로, false 를 true 로 변경하는 연산자, boolean 타입에만 적용할 수 있다.

토글 기능 구현에 주로 사용

 

public class DenyLogicOperatorExam {
	public static void main(String[] args) {
    	boolean play = true;
        System.out.println(play);
        
        play = !play;
        System.out.println(play);
        
        play = !play
        System.out.println(play);
    }
}

 

 

4. 비트 반전 연산자 ( ~ )

 

정수 타입 (byte, short, int, long) 의 피연산자에만 사용되며,

피연산자의 비트 값들을 0은 1, 1은 0으로 반전시킨다.

 

비트 반전 연산자의 산출 타입은 int 형이다.

 

따라서 피연산자는 연산 수행 전 int로 자동 타입 변환이 된 후 비트 반전이 일어난다.

 

byte v1 = 10;

byte v2 = ~v1;   // X 컴파일 에러!! int 형으로 반환된다.

int v2 = ~v1;     // O

 

정수의 음수 표현은 2의보수 (비트를 반전 시킨 후, +1)이므로 부호가 반대인 정수도 구할 수 있다.

 

byte v1 = 10;

int v2 = ~v1 + 1;   // -10 저장됨

 

더보기

자바는 정수값을 총 32비트 이진 문자열로 반환하는 Integer.toBinaryString( ) 메소드를 제공한다.

 

String v1BinaryString = Integer.toBinaryString(10);   // 10 의 이진 문자열

 

* 위의 메소드는 앞의 비트가 모두 0 이면 0 은 생략되고 나머지 문자열만 반환하기 때문에

  32 비트의 모든 문자열을 얻기 위해서는 아래와 같은 메소드가 필요하다.

 

public static String toBinaryString(int value) {
	String str = Integer.toBinaryString(value);
    while(str.length() < 32) {
    	str = "0" + str;
    }
    
    return str;
}

 

public class BitReverseOperatorExam {
	public static void main(String[] args) {
    	int v1 = 10;
        int v2 = ~v1;
        int v3 = ~v1 + ;
        
        System.out.println(toBinaryString(v1) + " (십진수 : " + v1 + ")"); 
        // 0~01010 십진수:10
        System.out.println(toBinaryString(v2) + " (십진수 : " + v2 + ")"); 
        // 1~10101 십진수:-11
        System.out.println(toBinaryString(v3) + " (십진수 : " + v3 + ")"); 
        // 1~10110 십진수:-10
        System.out.println();
    
    public static String toBinaryString(int value) {
    	String str = Integer.toBinaryString(value);
        while(str.length() < 32) {
        	str = "0" + str;
        }
        return str;
    }
}