본문 바로가기

프로그래밍/자바기술

자바[Java] 강좌 #7 - 연산자

7강. 자바 강좌는 연산자입니다.


* 변수 선언 및 값 할당 *

v변수에 값(상수) 할당
§“=“ 연산자 사용
§오른쪽에서 왼쪽으로 할당
§변수끼리도 할당 가능
§변수에 값이 존재 하더라도 다른 값을 할당하면 마지막 할당된 값이 할당(Update)
§할당의 예
§선언과 할당을 분리 : int a;   a = 100;
§선언과 할당을 동시에 : int a = 100;
§동일한 자료형인 경우 여러 개를 분리하여 선언과 할당 : int a, b;   a = 100, b= 200;
§동일한 자료형인 경우 여러 개를 동시에 선언과 할당 : int a = 100, b = 200;

§변수끼리의 할당 : int a, b;   a = 100;   b = a;

* 연산자(Operator) *

v자바의 연산자는 대부분 C/C++의 연산자와 동일한 의미를 가진다
v연산자 종류
§산술 연산자(+, -, *, /, %)
§대입 연산자(=)
§복합 대입 연산자(+=, -=, *=, /=, %=)
§형변환 연산자((DataType))
§증감 연산자(++, --)
§비교 연산자(>, >=, <, <=, ==, !=, instanceof)
§비트 연산자(&, |, ^, ~)
§논리 연산자(&&, ||, !)
§조건 삼항 연산자( ? : )
§배열 연산자([])

§메소드 연산자(())

* 산술 연산자 *
v정수, 실수의 수학적 연산과 관련된 연산자

연산자

사용법

설   명

+

op1 + op2

-

op1 - op2

*

op1 * op2

/

op1 / op2

%

op1 / op2

op1op2로 나눈 나머지를 구한다


* 복합 대입 연산자 *
v연산자와 대입연산자를 결합한 연산 후 대입 연산자

연산자

사용법

  

+=

op1 += op2

op1 = op1 + op2

-=

op1 -= op2

op1 = op1 - op2

*=

op1 *= op2

op1 = op1 * op2

/=

op1 /= op2

op1 = op1 / op2

%=

op1 %= op2

op1 = op1 % op2

&=

op1 &= op2

op1 = op1 & op2

|=

op1 |= op2

op1 = op1 | op2

^=

op1^= op2

op1 = op1 ^ op2





* 형변환 연산자 *

v형변환은 자동적으로 발생하거나, 또는 사용자에 의해 명시적으로 발생할 수 있다

v자동 형변화(Promotion) – Up Casting
작은 데이터타입에서 큰 데이터타입으로의 형변환은 자동적으로 이루어 진다
데이터의 손실이 발생하지 않는다
) int j = 5;   double result = 160.0 + j;        // int형을 double형으로 형변환 후 연산
) int I = 10;   System.out.println(“i = “ + i); // int형을 문자열로 형변환 후 연산
v강제 형변화(Demotion) – Down Casting
큰 데이터타입에서 작은 데이터타입으로 형변환 하려면 형변환 연산자(‘(DataType)’)를 사용하여야 한다
데이터의 손실이 발생할 수 있다
실수를 정수로 출력하고자 할 경우 주로 사용한다

) double s1 = 170.234;   int s2 = (int)s1;   System.out.println(s2);
      // 8
바이트 중 앞의 4바이트를 버리고 뒤의 4바이트만 사용


* 증감 연산자 *

v변수의 앞이나 뒤에 붙여서 변수의 값을 1 증가 시키거나 감소 시키는 연산자

연산자

사용법

  

++

op1++

op1 = op1 + 1

--

op1--

op1 = op1 – 1

v증감 연산자가 변수의 앞에 붙느냐, 뒤에 붙느냐에 따라 결과가 달라진다
public class OperatorExam{
        public static void main(String args[]){
                int x = 1;
                int y = x++;
                System.out.println(“y의 값은: ” + y); // 1
                
                x = 1;
                int z = ++x;
                System.out.println(“z의 값은: ” + z);  // 2
        }
}

* 비교 연산자 *

v두 개의 값을 비교한 후에  결과로 true 또는 false값을 반환한다

§제어문의 조건문이나 반복문에 자주 사용된다


연산자

사용법

  

>

op1 > op2

op1op2보다 큰 경우 true

>=

op1 >= op2

op1op2보다 크거나 같은 경우 true

<

op1 < op2

op1op2보다 작은 경우 true

<=

op1 <= op2

op1op2보다 작거나 같은 경우 true

==

op1 == op2

op1op2가 같은 경우 true

!=

op1 != op2

op1op2가 같지 않은 경우 true

instanceof

op1 instanceof 클래스

op1이 클래스의 인스턴스인 경우 true


* 비트 연산자 *

v데이터를 비트단위로 연산할 수 있는 연산자로 정수형(byte, short, int, long)에만 사용할 수 있다


연산자

사용법

   

&

op1 & op2

비트단위의 논리곱(AND)

|

op1 | op2

비트단위의 논리합(OR)

^

op1 ^ op2

비트단위의 배타적 논리합(XOR)

~

~op1

비트단위의 보수(부정)

>>

op1 >> op2

op1을 op2만큼 오른쪽으로 이동시킴

이동한 만큼의 왼쪽  비트는  부호 확장이 발생

>>>

op1 >>> op2

부호 확장이 없고 이동한 만큼의 왼쪽 비트는 항상 0으로 채운다

<<

op1 << op2

op1을 op2만큼 욎쪽으로 이동시킴

이동한 만큼의 오른쪽  비트는  0으로 채운다


* 논리 연산자 *

v비트 논리 연산자(&, |, ^, ~)의 경우 연산 대상이 정수형과 논리값에 모두 가능하지만, 논리 연산자의 경우 논리값에만 적용할 수 있다
v논리 연산자는 오퍼랜드의 값을 평가하여 결과로 true 또는 false 값을 반환한다

v&&(논리곱)||(논리합) 연산자의 경우 Short-circuit이 발생한다


연산자

사용법

  

&&

op1 && op2

op1op2가 모두 true인 경우 true

||

op1 || op2

op1op2중 둘 중 하나 이상이 true인 경우 true

!

!op1

op1true이면 false, false이면 true


v조건 ? 수식1 : 수식2 ;
§조건을 평가해서 true이면 수식1false이면 수식2를 실행한다

§조건문(if) 대신에 대입 연산자와 함께 유용하게 사용된다
public class OperatorExam{ 
       public static void main(String[] args) { 
           int a=2, b=3, c=1, max; 
           max = (a > b) ? a : b; 
           max = (max > c) ? max : c; 
           System.out.println( " 최대값은  " + max + " 이다."); 
       } 
} 

* 연산자 우선순위 *

v우선순위에 상관 없이 ()를 사용하여 우선순위를 지정할 수 있다

우선순위

연산자

1

()   []   .

2

++   --   ~   !

3

*   /   %

4

+   -

5

>>   >>>   <<

6

>   >=   <   <=

7

==   !=

8

&

9

^

10

|

11

&&

12

||

13

?  :

14

=