연산자의 문법 이해하기

[연산자 이해]

1. 수식 이해

  (1) 수식이란?

  • 피연산자와 연산자로 구성된 문장을 말한다.
  • 피연산자는 상수값 또는 변수를 사용한다.
int result = 123 + 456;

/*
*	피연산자 = int result, 123, 456
*	연산자 = =, +
*
*/

 

2. 연산자 이해

  (1) 연산자 형식

  • 단항 연산자 : 피연산자가 한 개인 연산자를 말한다.
  • 이항 연산자 : 피연산자가 두 개인 연산자를 말한다.
  • 삼항 연산자 : 피연산자가 세 개인 연산자를 말한다.
단항 이항 삼항
- + = <= & ? :
~ - < >= ^
! * > == &&
++ / << != ||
-- % >>    

 

  (2) 연산자 종류

산술 연산자 +  -  *  /  %
대입 연산자 =  +=  -=  *=  /=  %=
증감 연산자 ++  --
관계 연산자 ==  !=  >  <  >=  <=
논리 연산자 !  &&  ||
조건 연산자 ? :
비트 연산자 &  |  ^  ~  <<  >>  |=  ^=  ~=  <<=  >>=
기타 연산자 (자료형)  instanceof

  (3) 연산자 우선순위

  • 우선순위가 높은 연산자가 있는 수식이 먼저 계산된다.
우선순위 1 괄호, 단항 연산자 ()  -  ~  !  ++  --  (자료형)
2 산술 연산자 *  /  %  +  -  (비트연산자)
3 관계 연산자 ==  !=  >  <  >=  <=  instanceof
4 비트 연산자 &  |  ^  ~
5 논리 연산자 &&  ||
6 조건 연산자 ? :
7 대입 연산자 =  +=  -=  *=  /=  %=

 

3. 산술 연산자 이해

  (1) 산술 연산자란?

  • 이항 연산자이다.
  • 덧셈, 뺄셈, 곱셈, 나눗셈은 정수형과 실수형 계산이 가능하다.
  • 나머지는 정수형 계산만 가능하다.

(2) 산술 연산자 종류

기호 의미 설명
+ 덧셈 ● 정수형과 정수형의 결과는 정수형이다.
● 정수형과 실수형의 결과는 실수형이다.
● 실수형과 실수형의 결과는 실수형이다.
- 뺄셈
* 곱셈
/ 나눗셈 ● 정수형과 정수형의 나눗셈의 결과는 정수형이다.
● 정수형과 실수형의 나눗셈 결과는 실수형이다.
● 실수형과 실수형의 나눗셈 결과는 실수형이다.
● 0으로 나누면 실행오류가 발생한다.
% 나머지 계산 결과값은 나눗셈을 한 후 나머지 값만 도출한다.

 

4. 대입 연산자 이해

  (1) 대입 연산자란?

  • 이항 연산자에 해당된다.
  • 연산자 오른쪽에 있는 값을 왼쪽에 대입 또는 저장하는 연산자이다.
int result = 100;

int result2 = 100 + 30;

// = : 대입 연산자
// result2에서 100 + 30이 먼저 계산된 후 result에 계산된 130이 대입된다.

  (2) 복합 대입 연산자란? 

  • 단순 대입 연산자 (=) 와 산술 연산자를 복합적으로 사용하는 연산자를 의미한다.
기호 사용 예 동일한 의미
+= sum += 3; sum = sum + 3;
-= sum -= 3; sum = sum - 3;
*= sum *= 3; sum = sum * 3;
/= sum /= 3; sum = sum / 3;
%= sum %=3; sum = sum % 3;

 

5. 증감 연산자 이해

  (1) 증감 연산자란?

  • 단항 연산자이다.
  • 정수형 변수의 값을 1 증가시키거나 감소할 때 사용한다.
  • 변수 이름 앞 또는 뒤에 붙여 사용하며 붙이는 위치에 따라 이름이 다르다.
  • 연산자 기호는 ++와 --가 있다.

  (2) 전위 증감 연산자 / 후위 증감 연산자

    1) 전위 증감 연산자

  • 변수 이름 앞에 증감 연산자를 사용한다.
  • 전체 수식을 계산하기 전 증감 연산자를 계산한 후에 수식을 계산한다.
  • ex.) ++a; --b;

   2) 후위 증감 연산자

  • 변수 이름 뒤에 증감 연산자를 사용한다.
  • 전체 수식을 계산한 다음 제일 마지막에 증감 연산자를 계산한다.
  • ex.) a++; b--;

 

6. 관계 연산자 이해

  (1) 관계 연산자란?

  • 이항 연산자이다.
  • 연산자를 기준으로 양쪽의 피연산자를 비교하여 참과 거짓을 판별한다.
기호 설명 사용 예 의미
== 같다 A == B A와 B가 같다.
!= 다르다 A != B A와 B가 다르다.
> 크다 A > B A가 B보다 크다.
< 작다 A < B A가 B보다 작다.
>= 크거나 같다 A >= B A가 B보다 크거나 같다.
<= 작거나 같다 A <= B A가 B보다 작거나 같다.

 

7. 논리 연산자 이해

  (1) 논리 연산자의 개요

  • 논리 연산자의 종류로는 단항 연산자 1개와 이항 연산자 2개로 나뉜다.
  • 피연산자를 대상으로 참과 거짓을 판별한다.
  • 피연산자란, 상수와 변수, 관계식을 의미한다.
  • 참이면 true, 거짓이면 false를 의미한다.
항목 관계 연산자 논리 연산자
형식 이항 연산자 단항 연산자, 이항 연산자
동작 피연산자의 값을 비교 피연산자의 참과 거짓을 비교
결과값 참이면 true, 거짓이면 false

  (2) 논리 연산자의 종류

항목 기호 형식 설명
NOT ! 단항 연산자 피연산자를 부정
AND && 이항 연산자 피연산자 모두 참이면 참
OR || 이항 연산자 피연산자 모두 거짓이면 거짓

  (3) 논리 연산자의 우선순위

  • NOT > AND > OR
  • 괄호() > 괄호 안 관계 연산자 > NOT > AND > OR > 대입 연산자(=)

 

8. 조건 연산자 이해

  (1) 조건 연산자의 개요

  • 삼항 연산자이다.
  • 피연산자의 역할이 각각 있다.

    1) 피연산자의 역할

  • 첫 번째 피연산자 - 조건식 (참 또는 거짓)
  • 두 번째 피연산자 - 조건식이 참인 경우 수행하는 상수 OR 변수 OR 수식
  • 세 번째 피연산자 - 조건식이 거짓인 경우 수행하는 상수 OR 변수 OR 수식
result = (조건식) ? (상수1 or 변수1 or 수식1) : (상수2 or 변수2 or 수식2);

// 조건식이 참인 경우 : 1번 수행
// 조건식이 거짓인 경우 : 2번 수행

 

 

9. 비트 연산자 이해

  (1) 비트 연산자의 개요

  • 비트 단위로 연산한다.
  • 종류로는 비트 논리 연산자와 비트 시프트 연산자가 있다.
종류 항목 기호 형식 설명
비트
논리
연산자
NOT ~ 단항 연산자 비트 반전 ( 0은 1로, 1은 0으로)
AND & 이항 연산자 피연산자 모두 1인 경우만 1
OR | 피연산자 모두 0인 경우만 0
XOR ^ 피연산자가 서로 달라야 1
시프트
연산자
왼쪽 시프트 << 왼쪽으로 비트 이동 (부호 유지)
오른쪽 시프트 >> 오른쪽으로 비트 이동 (부호 유지)
>>> 부호 비트를 포함한 오른쪽으로 비트 이동

  (2) 비트 연산자의 사용 예시

    1) NOT 연산

int value = 1;		// 비트 표현 : 0000 0001

int result = ~value;	// 비트 표현 : 1111 1110

// 부호 비트 반전 (양수를 음수로)
// 2의 보수로 표현됨 (음수값)

    2) AND 연산

int v1 = 3;		// 비트 표현 : 0000 0011
int v2 = 5;		// 비트 표현 : 0000 0101

int res = v1 & v2;		

// & : v1가 v2의 자리가 둘 다 1 이어야 1. 하나라도 0이면 0. 둘 다 0이어도 0.
// v1 & v2 : 0000 0001

System.out.println(res); // 1

    3) OR 연산

int v1 = 3;		// 비트 표현 : 0000 0011
int v2 = 5;		// 비트 표현 : 0000 0101
int res = v1 | v2 ;		

// | : 둘 중 하나의 자리가 1이어도 1. 둘 다 0이면 0.
// v1 | v2 : 0000 0111

System.out.println(res); // 7

    4) XOR 연산

int v1 = 3;		// 비트 표현 : 0000 0011
int v2 = 5;		// 비트 표현 : 0000 0101
int res = v1 ^ v2;		

// ^ : v1과 v2 둘 중 하나만 1이어야 1. 둘 다 1일 경우도 0.
// v1 ^ v2 : 0000 0110

System.out.println(res); // 6

    5) 왼쪽 시프트 연산 (부호 유지)

int value = 3;
int res = value << 1;

// value : 0000 0011
// value << 1 : 0 0000 0110 , 맨 앞에 0은 버려짐.

System.out.println(res); // 6

    6) 오른쪽 시프트 연산 (부호 유지)

int value2 = 6;		// 비트 표현 : 0000 0110
int res2 = value2 >> 1;

// value2 >> 1 : 0000 0011 0 , 맨 뒤에 0은 버려짐.

System.out.println(res2); // 3

    7) 오른쪽 시프트 연산 (부호 포함)

int value3 = -1;

int res3 = value3 >>> 1;

System.out.println(res3);
// res3 = 2147483647	, 잘 쓰이지 않는다 해서 그냥 이렇다 라고만 알고 있는 상태. 보충 필요.

 

+ Recent posts