본문으로 바로가기

연산자정의.. 연산자란??

 

주어진 식에 대한 계산결과를 수행하는 것을 연산이라 하며, 연산자는 이를 수행하기 위한 기호이다.

 

식 예시

연산자 : 연산을 수행하는 기호 ( +, -, /, * )

피연산자 : 연산자의 대상 (상수, 변수 )

 

 

 

연산자 종류, 우선순위, 정의

 

연산자 종류는 아래와 같다.

 

우선연산자

  ( )  [ ]  .

가장 높음

단항연산자

  +  -  !  ~  ( )  ++  --

높음

산술연산자

  +  %  /  *  -

높음

쉬프트연산자

  <<  >>  >>>

높음

관계연산자

  >  <  >=  <=  ==  !=

높음

논리연산자

  &  ^  |  &&  ||

낮음

삼항연산자

  ?  :

낮음

대입연산자

  =  *=  /=  %=  +=  -=  <<=  >>=    >>==  &=  ^=  !=

낮음

우선순위는 표에서 나오는 순서와 같다. 하나의 식에서 여러개의 연산자가 쓰인다면 표에 나온 연산자 순서대로 연산을 수행한다. 이 표에 나오는 연산자 종류에 대해 알아보도록 하자.

 

1. 우선 연산자

 

1-1 ( ) 연산자

식에서 ( ) 안에 있는 연산을 최우선으로 수행한다.

 

예제) A *  (B + C)

( ) 안에 있는 + 연산을 먼처 * 연산을 수행한다.

 

1-2 [] 연산자

배열에서 사용하는 연산자 이다.

 

예제) char[] a = new char[3];

=(대입) 연산보다 [] 메모리 할당을 먼처 수행하게 된다.

 

 

2. 단항 연산자

 

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

+ 연산은 부호를 유지하는 연산이며, - 연산은 부호를 변경하는 연산이다.

 

예제)

1
2
3
4
5
int a = -5;
 
System.out.println(+a);
 
System.out.println(-a);
 

 

결과)

1
2
3
-5
 
5
 

 

 

2-2 논리부정 연산자(!)

! 연산은 boolean타입의 변수에서만 사용할 있는 연산자 이며 반대의 논리값으로 바꿔준다.

 

예제)

1
2
3
4
5
6
boolean testBool = false;
 
 
System.out.println(testBool);
 
System.out.println(!testBool);
 

 

 

결과)

1
2
3
false
 
true
 

 

 

2-3 비트전환 연산자(~)

~ 연산은, 피연산자(상수, 변수)값을 8Bit 2진수로 표현했을때 0 1, 1 0으로 변환시켜준다.

주의할점은 8bit 맨앞자리 bit 부호비트로 사용된다. (0인경우 양수, 1인경우 음수)

 

예제)

1
2
3
4
5
int testTilde = 10;
 
System.out.println(testTilde);
 
System.out.println(~testTilde);
 

 

결과)

1
2
3
10
 
-11
 

1. 10진수를 8bit 표현하면 00001010 이다.

2. 해당 비트의 자리 값들을 반대값으로 변경하면 11110101 나오며

3. 뒷자리 부터 처음으로 1 만날때까지는 원래의 값을 유지하며 이후로는 값을 반대로 변환 시켜준다.

   (맨앞의 부호비트는 변경하지 않는다.) 11110101 -> 10001011

4. 해당 비트는 맨앞자리(부호비트) 1이기때문에 음수이며 나머지 비트를 계산하면 -(23 + 2 + 1) = -11

 

 

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

++ 연사자의 경우 값을 1증가 시키며, --연산자의 경우 값을 1감소 시킨다.

 

 예제)

1
2
3
4
5
6
7
8
9
10
11
int in$decreaseTest = 0;
System.out.println(3 * in$decreaseTest++);
 
in$decreaseTest = 0;
System.out.println(3 * ++in$decreaseTest);
 
in$decreaseTest = 0;
System.out.println(3 * in$decreaseTest--);
 
in$decreaseTest = 0;
System.out.println(3 * --in$decreaseTest);
 

 결과)

1
2
3
4
5
6
7
0
 
3
 
0
 
-3
 

 

예제결과와 같이 증감연산자는 피연산자의 위치에 따라 우선순위가 달라진다.

피연산자 앞에 쓰이는 경우를 전위형 이라하며 다른 연산을 수행하기 전에 증감연산부터 수행하게 하며

피연산자 뒤에 쓰이는 경우를 후위형 이라하며 다른 연산을 수행한후 해당 피연산자를 증감시킨다.

 

전위형) 3 * ++in$decreaseTest

후위형) 3 * in$decreaseTest++

 

전위형 같은 경우 변수를 먼처 1증가 시키고 3 곱셉하여 3이라는 결과가 나오지만,

후위형 같은 경우 3 0 먼처 곱셈한후 변수를 1증감시키므로 0이라는 결과가 나온다.

 

 

 

3. 산술 연산자

 

3-1 사칙 연산자(* / + - %)

사칙연산자의 경우 *(곱셈), /(나눗셈), %(나머지) +(덧셈), -(뺄셈) 보다 우선순위가 높다. 사칙연산자는 다음과 같은 특징을 가지고 있다.

 

1. 피연산자의 타입을 큰타입으로 일치시킨다.

   - long + int = long,  float + double = double

 

2. 피연산자의 타입이 int형보다 작으면 int 변환된다.

   - byte + byte = int,  short + byte = int

 

3. 정수형간의 나눗셈에서 0으로 나누는 식은 ArithmeticException이발생한다.

   - int a = 3 / 0