[JAVA] 02. 연산자(Operator)

2017. 7. 28. 23:40·JAVA/개념
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
'JAVA/개념' 카테고리의 다른 글
  • [JAVA] 05. OOP 1(객체 지향 언어)
  • [JAVA] 04. Array (배열)
  • [JAVA] 03. 조건문, 반복문 (Control Statement)
  • [JAVA] 01. 변수(Variable)
밍글링글링
밍글링글링
mingling - 밍글링, 밍글밍글링. 코드와 어우러지다. IT/ 프로그래밍/소스
    반응형
    250x250
  • 밍글링글링
    mingling
    밍글링글링
  • 전체
    오늘
    어제
    • 밍글링글링 (407) N
      • Flutter (2)
      • 일상생활 (8)
        • 리뷰 (1)
        • 생활정보 (4)
        • 맛집 (0)
        • 여행 (0)
        • 모든정보 (3)
      • JAVA (126)
        • 개념 (6)
        • 예제 (115)
        • Exception (2)
      • C (1)
        • C (1)
        • C++ (0)
        • C# (0)
      • JS (29)
        • JavaScript (18)
        • JQuery (5)
        • AJax (0)
        • NODE.JS (6)
        • Angular.JS 2.0 (0)
      • WEB (87)
        • HTML (6)
        • CSS (61)
        • JSP (20)
        • JSTL (0)
      • FrameWork (8)
        • Spring (8)
        • BootStrap (0)
        • MyBATIS (0)
        • JUnit (0)
      • 외부 라이브러리 (5)
      • 공유 소스 관리 (5)
        • Git (5)
        • SVN (0)
      • 빅데이터 프로그래밍 (37)
        • Python (37)
        • R Programming (0)
      • DB (7)
        • ORACLE (0)
        • MySql (6)
      • Development Tools (7)
        • StarUML (0)
        • eXERD (0)
        • Eclipse (4)
      • SKILL (6)
        • Migration (0)
        • Security (6)
      • MicroSoft (0)
        • Excel (0)
        • Word (0)
      • Android (0)
      • Server (21)
        • Ubuntu (5)
        • Linux (15)
      • IOS (0)
      • XML (0)
      • 미디어 (0)
      • 공지사항 (3)
      • NETWORK (1)
      • 게임 (4)
        • 피파 (1)
        • 리니지M (0)
        • 배틀그라운드 (1)
        • 듀랑고 (2)
      • 세상 이슈 (6)
      • 일렉트론 (0)
      • 대회 소식 (4)
      • 업무 (2)
      • Express, Vue (6)
      • docker (11)
      • svelte (3)
      • 블록체인 (1)
      • IT (10) N
      • Rust (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    rust linux
    SSL 인증서
    자바 클래스
    css list
    ubuntu
    nginx
    vscode
    VS Code 팁
    리눅스 설치
    css transition
    자바 for문
    Node
    spring java
    nginx ssl 적용
    ssl 인증서 발급
    jsp parameter
    Extension Bisect
    css block
    java casting
    nginx ssl 설정
    lang rust
    css float
    vue cli
    React Compiler
    자바 생성자
    프런트엔드
    자바 배열
    gitlab 설치
    css table
    AI 코딩 에이전트
    docker
    오류
    vue 설치
    클론코딩
    css perspective
    자바 exception
    jsp include
    Java Array
    티스토리 자동화
    에디터 팁
    svelte
    브라우저 자동화
    css tb
    자바 객체 지향
    proxy pass
    servlet class
    러스트
    Rust lang
    API 설계
    mysql db
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
밍글링글링
[JAVA] 02. 연산자(Operator)
상단으로

티스토리툴바