JAVA/개념

[JAVA] 02. 연산자(Operator)

밍글링글링 2017. 7. 28.
728x90

1. 연산자(Operator) 란 ?

연산자(Operator)

- 어떠한 기능을 수행하는 기호

피연산자(Operand)

- 연산자의 작업 대상(변수, 상수,리터럴, 수식)

a + b

 

 ex)

int a=1;
a+1

= (같은 의미)

a= a+1
++a;

 

 

2. 연산자의 종류

단항 연산자 : + - (타입) ++ -- ~ !

이항 연산자 : 산술(+ - ^ / % << >> >>>) 비교(> < >= <= !=) 논리(&& || & ^ |)

삼항 연산자 : : ? :

대입 연산자 : : =

 

3. 연산자의 우선순위

종류 연산방향 연산자 우선순위
단항 연산자 ++ -- + - ~ ! (타입)  높음
산술 연산자 * / %   
  + -  
  << >> >>>  ↑
비교 연산자 < > <= >= instanceof  
  == !=  
논리 연산자 &  
  ^  
  |  
  &&
  ||  
삼항 연산자 ?:  
대입 연산자 = *= /= %= += -= <<=
>>= >>>= &= ^= |=
낮음

 

3. 연산자의 우선순위(2/4)

- 괄혼의 우선순위가 제일 높다.

- 산술>비교>논리>대입

- 단항>이항>삼항

- 연산자의 연산 진행방향은 왼쪽에서 오른쪽(->)이다

단, 단항, 대입 연산자만 오른쪽에서 왼쪽()<-이다.

 

3. 연산자의 우선순위(3/4)

- 상식적으로 생각하라, 우리는 이미 다 알고 있다.

ex1) -x +3 단항>이항

ex2) x + 3 * y  곱셈,나눗셈>덧셈,뺼셈

ex3) x + 3 > y - 2 산술>비교

ex4) x > 3 & & x < 5  비교>논리

ex5) int result = x + y * 3; 항상 대입은 맨 끝에

 

3. 연산자의 우선순위(4/4)

- 그러나 몇가지 주의해야 할 것이 있다.

1. <<, >>, >>>는 덧셈연산자보다 우선순위가 낮다.

ex5) x<<2 +1 x<<(2+1)과 같다.

 

2. ||,|(OR)는 &&, &(AND)보다 우선순위가 낮다.

ex6) x< -1 || x > 3 & & x < 5

      x< -1 ||(x > 3 & & x < 5 )와 같다.

 

4. 증감연산자 - ++, --

증가연산자(++): 피연산자의 값을 1증가 시킨다.

감소연산자(--): 피연산자의 값을 1감소 시킨다.

int i = 5;

int j= 0;

진위형 j=++i; (++i;, j=i;) 값이 참조되기 전에 증가시킨다.

후위형 j=i++; (j=1; i++;) 값이 참조된 후에 증가시킨다.

 

5. 부호연산자(+ -)와 논리부정연산자(!)

부호연산자(+, -); '+'는 피연산자에 1을 곱하고 '-'는 피연산자에 -1을 곱한다.

논리부정연산자(!): true는 false로, false는 true로 피연산자가 boolean일 때만 사용가능

int i = -10;    boolean power = false;

i=+i;              power = !power;

i = -i;            power =!power;

 

 

6. 비트전환연산자 - ~

정수를 2진수로 표현했을 때, 1을 0으로 0은 1로 바꾼다.

정수형에서만 사용가능.

2진수        10진수

00001010   10

11110101    -11

11110101    -11

00000001    +)   1

11110110    -10

 

7. 이항연산자의 특징(1/7)

이항연산자는 연산을 수행하기 전에 피연산자의  타입을 일치시킨다.

int보다 크기가 작은 타입은 int로 변환한다.

(byte, char, short -> int)

피연산자 중 표현범위가 큰 타입으로 형변환 한다.

byte + short -> int + int -> int

char + int -> int + int -> int

float + int -> float + float -> float

long + float -> float + float -> float

float + double -> double + double -> double

 

7. 이항연산자의 특징(2/7)

byte a= 10;

byte b = 20;           byte + byte -> int + int -> int

byte c = a+b;

 

byte c= (byte)a+b; // 에러

byte c= (byte)(a+b); // Ok

 

7. 이항연산자의 특징(3/7)

int a = 1000000; // 1,000,000

inb b = 1000000 // 2,000,000

long c = a*b; // c는 2,000,000,000,000 ?

                 // c는 -1454759936 !!!

               int * int -> int

long c = (long)a*b; // c는 2,000,000,000,000 !

       long *int ->long*long -> long

 

7. 이항연산자의 특징(4/7)

long a = 1000000*1000000; //a는 -727,379,968

long b = 1000000*1000000L; //b는 1,000,000,000,000

 

int c = 1000000*1000000 / 1000000; //c는 -727

int d = 1000000/ 1000000*1000000;//d는 1,000,000

 

7. 이항연산자의 특징(5/7)

char c1 = 'a';

char c2 = c2 +1; //에러

char c2 = (char)(c1 + 1);

char c2 = ++c1; //OK

int i = 'B'-'A';

int i = '2'-'0';

문자 코드
... ...
0 48
1 49
2 50
... ...
A 65
B 66
C 67
... ...
a 97
b 98
c 99

 

7. 이항연산자의 특징(6/7)

float pi = 3.141592f;

float shortPi = (int)(pi*1000) /1000f;

                  (int)(3.141592f*1000)/1000f;

                  (int)(3141.592f)/1000f;

                        3141 / 1000f;

                     3141.0f / 1000f

                       3.141f

 

7. 이항연산자의 특징(7/7)

*Math.round() : 소수점 첫째자리에서 반올림한 값을 반환

 

float pi = 3.141592f;

float shortPi = Math.round(pi*1000)/1000f;

    Math.round(3.141592f*1000)/1000f;

          Math.round(3141.592f) / 1000f

                3142 / 1000f;

              3142.0f / 1000f

                    3.142f

8. 나머지연산자 - %

나누기한 나머지를 반환한다.

홀수, 짝수 등 배수검사에 주로 사용.

int share = 10/8;

int remain = 10%8;

    10%8 -> 2

    10%-8 -> 2

   -10%8 -> -2

   -10&-8 ->-2

 

9. 쉬프트연산자 - <<, >>, >>>

- 2ⁿ으로 곱하거나 나눈 결과를 반환한다.

- 곱셈, 나눗셈보다 빠르다.

x<<n 은 x*2ⁿ과 같다

x>>n 은 x/2ⁿ과 같다

8<<2 는 8*2ⁿ과 같다

8<<2 은 8*2ⁿ과 같다

 

10. 비교연산자 - > < >= <= == !=

- 피연산자를 같은 타입으로 변환한 후에 비교한다.

 결과 값은 true 또는 false 이다.

- 기본형(boolean 제외)과 참조형에 사용할 수 있으나 참조형에는 ==와 !=만 사용할 수 있다.

수식 연산결과
x > y x가 y보다 클 때 true, 그 외에는 false
x < y x가 y보다 작을 때 true, 그 외에는 false
x >= y x가 y보다 크거나 같을 때 true, 그 외에는 false
x <= y x가 y보다 작거나 같을 때 true, 그 외에는 false
x == y x와 y가 같을 때 true, 그 외에는 false
x != y x와 y가 다를 때 true, 그 외에는 false

 

11. 비트연산자 - & | ^

- 피연산자를 비트단위로 연산한다.  실수형(float, double)을 제외한 모든 기본형에 사용가능- OR연산지(|) : 피연산자 중 어느 한 쪽이 1이면 1이다.- AND연산자(&) : 피연산자 양 쪽 모두 1이면 1이다.- XOR연산자(^) : 피연산자가 서로 다를 때 1이다.

x y x|y x&y x^y
1 1 1 1 0
1 0 1 0 1
0 1 1 0 1
0 0 0 0 0

 

2진수 10진수
3 | 5 = 7 00000011
| ) 00000101
3
5
  00000111  7
3 & 5 = 1 00000011
& ) 00000101
3
5
  00000001 1
3 ^ 5 = 6 00000011
^ ) 00000101  
3
5
  00000110 6

 

12. 논리연산자 - && ||

- 피연산자가 반드시 boolean이어야하며 연산결과도 boolean이다.

 &&가 ||보다 우선순위가 높다. 같이 사용되는 경우 괄호를 사용하자

 

→ OR연산자(||) : 피연산자 중 어느 한 쪽이 true이면 true이다.

→ AND연산자(&&) : 피연산자 양 쪽 모두 true이면 true이다.

x y  x || y x && y
true  true  true  true 
true  false true  false
false true  true  false
false false false false

 

 

13. 삼항연산자 - ?:

- 조건식의 연산결과가 true이면 '식1'의 결과를 반환하고 false이면 '식2'의 결과를 반환한다.

(조건식)? 식1: 식2

int x = -10;

int absX = x >= 0 ? x : -x;

if(x>=0){

absX = x;

} else {

abxX = -x;

}

 

int score = 50;

char grade = score >= 90 ? 'A' : (score >= 80? 'B' : 'C');

 

14. 대입연산자 - =  op=

- 오른쪽 피연산자의 값을 왼쪽 피연산자에 저장한다.단, 왼쪽 피연산자는 상수가 아니어야 한다.
int i = 0;i = i + 3;

op= =
i += 3; i = i + 3;
i -= 3; i = i - 3;
i *= 3; i = i * 3;
i /= 3; i = i / 3;
i &= 3; i = i & 3;
i <<= 3; i = i << 3;
i >>= 3; i = i >> 3;
i >>>= 3; i = i >>> 3;
i & 3; i = i & 3;
i ^= 3; i = i ^ 3
i |= 3;  i = i | 3;
i *= 10 + j; i = i * (10+j);

 

728x90

'JAVA > 개념' 카테고리의 다른 글

[JAVA] 06. OOP2(객체 지향 언어)  (0) 2017.08.01
[JAVA] 05. OOP 1(객체 지향 언어)  (0) 2017.08.01
[JAVA] 04. Array (배열)  (0) 2017.07.31
[JAVA] 03. 조건문, 반복문 (Control Statement)  (0) 2017.07.30
[JAVA] 01. 변수(Variable)  (1) 2017.07.28

댓글