[자바 java / 연산자(Operator)]

seulki·2022년 8월 8일
0

[java]

목록 보기
4/11
post-thumbnail

자바(java)


😍 연산자 (Operator)

연산자란?
- 연산자는 연산을 수행하는 기호를 의미한다.

연산자와 피연산자
- 연산을 수행하려면 반드시 연산의 대상이 있어야 하는데 이를 피연산자라고 한다.
- 연산자 : 연산을 수행하는 기호(+, -, &, / ...)
- 피연산자 : 연산자의 작업 대상
-> 연산자피연산자로 연산을 수행하면 항상 결과값을 반환한다.

        2 + 3 -> 피연산자 ( 2, 3 )
                 연산자 ( + )

식(표현식, expression)
- 연산자와 피연산자를 조합하여 계산하고자 하는 바를 표현한 것을
또는 표현식이라고 한다.

😘 연산자의 종류

종류연산자설명
산술연산자+, -, *, /, %, <<, >>사칙연산과 나머지 연산
비교연산자<, >, <=, >=, ==(같다), !=(다르다)크고 작음과 같고 다름을 비교
논리연산자&&, ||, ! , &, ^, ~그리고(AND)와 또는(OR)으로 조건을 연결
대입연산자=우변의 값을 좌변에 저장
기타연산자(type), ?: , instanceof형변환연산자, 삼항연산자, instanceof 연산자

😀 연산자의 우선순위와 결합규칙

  • 식에 사용된 연산자가 둘 이상일 경우,
    연산자의 우선순위에 의해서 연산순서가 결정된다.
  • 단항연산자이항연산자보다 우선순위가 높다.
  • 만일, 우선순위가 확실하지 않다면, 먼저 계산되어야 하는 부분을
    괄호로 묶어주면 된다.
  • 연산자의 결합규칙은 왼쪽에서 오른쪽 순서이지만,
    대입연산자(=)오른쪽에서 왼쪽으로 진행된다.

-> 정리
산술 > 비교 > 논리 > 대입 순서로 진행
단항(1) > 이항(2) > 삼항(3) 순서로 진행

😂 산술변환

  • 피연산자의 타입이 일치해야 연산이 가능하므로,
    피연산자의 타입이 서로 다르면 연산 전에 형변환 연산자
    타입을 일치시켜야 한다.
  • 대부분의 경우 두 피연산자의 타입 중 더 큰 타입으로 일치시키는데,
    작은 타입으로 형변환하면 원래의 값이 손실될 가능성이 있기 때문이다..
  • 작은 타입을 큰 타입으로 형변환 하는 경우 자동적으로 연산자 생략 가능
   10L + 10(int)
 -> long + int    ->  long + long (더 큰 타입으로 계산)

⑴ 두 피연산자의 타입을 일치시킨다. ( 보다 큰 타입으로 일치)
long + int -> long + long
float + int -> float + float
double + float -> double + double


⑵ 피연산자의 타입이 int 보다 작은 타입이면 int로 변환한다.
정수형 : byte, short, int, long

byte + short -> int + int
char + short -> int + int



😊 산술(사칙)연산자

  • 일반적인 덧셈( + ), 뺄셈( - ), 곱셈( * ),
    나눗셈( / ), 나머지( % )을 수행
  • 사칙연산의 결과는 대입연산자를 통하여 다른 변수에 대입될 수 있다.
5 / 3 => 정수 / 정수 => 정수  => 1
5 % 3 => 5를 3으로 나눈 나머지 값 => 2
5 / 3.0 => 정수 / 실수 => 실수 / 실수 => 1.666666
모든 수는 0으로 나눌 수 없다. => 실행 시 에러발생
 
int num = 100;
int zero = 0;
int result = num / zero;

System.out.println(result); 실행 시 에러 발생

😍 단항연산자(증감연산자)

  • 어떤 계산 결과를 다시 자기 자신에게 대입하고자 하는 경우의 약식 표현이다.
  • 증감연산자는 피연산자에 저장된 값을 1증가 ( ++ ), 또는 1감소 ( -- ) 시킨다.
  • 일반적으로 단항연산자는 피연산자의 왼쪽에 위치하지만,
    증감연산자는 양쪽으로 모두 가능하다.
  • 피연산자의 왼쪽에 위치하면 전위형(prefix),
    피연산자의 오른쪽에 위치하면 후위형(postfix)라고 한다.
int num = 10; 
++num;, num++; , --num;, num--;
단독으로 사용할 때는 왼쪽, 오른쪽 순서는 상관없지만,
그 외에는 왼쪽, 오른쪽에 따라 값이 달라진다.

int x = 100;
x = x + 5;
x += 5;

😍 복합대입연산자

  • 대입연산자는 변수와 저장공간에 값 또는 수식의 연산결과를 저장하는데
    사용한다.
  • 대입연산자의 왼쪽 피연산자를 lvalue(left value), 오른쪽 피연산자를 rvalue(right value)라고 한다.
  • 대입연산자의 rvalue변수 뿐만 아니라 식이나, 상수 모두 가능한 반면,
    lvalue는 반드시 변수처럼 변경할 수 있는 것이어야 한다.
복합대입연산자계산 결과
+=더한 값을 저장
-=뺀 값을 저장
*=곱한 값을 저장
/=나눈 값을 저장
%=나눈 나머지를 저장
int source = 100;
source += 100;  // 200
source -= 50;  //  150
source = *= 2; //  300
source /= 100; //  3
source %= 2;   //  1

😘 전위형과 후위형의 값 차이

  • 계산 식에서 ++가 왼쪽에 붙으면, 먼저 1 증가를 하고 계산을 한다.
    ++가 오른쪽에 붙으면, 계산을 먼저 한 후 1이 증가한다.
int a1 = 100;
int x1 = 1;
int y1 = a1 + x1++;  // 100 + 1
System.out,println(x1);  // 2  => 먼저 계산 후 1 증가
System.out.println(y1);  //101
int a2 = 100;
int x2 = 1;
int y2 = a2 + ++x2;  // 100 + 2
System.out.println(x2);  // 2 => 먼저 1 증가 후 계산
System.out,println(y2);  // 102

😍 비교연산자

  • 비교연산자두 피연산자를 비교하는데 사용되는 연산자이다.
    주로 조건문과 반복문의 조건식에 사용되며, 연산결과는 true, false
    참인지 거짓인지만 판별 가능하므로, boolean값으로 생성된다.
  • 비교연산자 역시 이항연산자이므로 비교하는 피연산자의 타입이
    서로 다를 경우, 자료형의 볌위가 큰 쪽으로 자동형변환 되어 비교한다.
비교연산자연산결과
>좌변값이 크면 true, 아니면 false
<죄면값이 작으면 true, 아니면 false
>=좌변값이 크거나 같으면 true, 아니면 false
<=좌변값이 작거나 같으면 true, 아니면 false

😍 등가비교연산자

등가비교연산자연산결과
==두 값이 같으면 true, 아니면 false
!=두 값이 다르면 true, 아니면 false
  • 두 피연산자의 값이 같은지 또는 다른지를 비교하는 연산자이다.
  • 기본형은 물론 참조형에도 사용할 수 있다.
  • 기본형의 경우 변수에 저장되어 있는 값이 같은지를 알 수 있고,
    참조형의 경우 객체의 주소값을 저장하기 때문에
    두 개의 피연산자가 같은 객체를 가리키고 있는지를 확인 할 수 있다.

😍 논리연산자

  • 논리연산자는 둘 이상의 조건을 '그리고(AND)나 또는(OR)'으로
    연결하여 하나의 식으로 표현할 수 있다.
논리연산자
||OR 결합피연산자 중 어느 한 쪽만 true이면 true
&&AND 결합피연산자 모두 true여야 true
!NOT!true = false / !false = true

-> 👍효율적인 연산을 하기 위해서는👍
*OR 연산 일 경우 : 참일 확률이 높은 피연산자를 왼쪽에 놓는게 좋다.
(왼쪽이 true일 경우, 오른쪽은 계산 자체를 안해도 된다)

*AND 연산 일 경우 : 거짓일 확률이 높은 피연산자를 왼쪽에 놓는게 좋다.
(왼쪽이 false일 경우, 오른쪽은 계산 자체를 안해도 된다)

😘 조건연산자(삼항연산자)

조건연산자(삼항연산자)조건식, 식1, 식2 모두 세 개의 피연산자를
필요로 하는 삼항연산자이며 조건연산자는 하나뿐이다.

조건식 ? 식1 : 식2
==> 조건식이 true라면, 식1을 실행 / 조건식이 false라면 식2를 실행

더 큰 수 구하기
int num1 = 5;
int num2 = 8;
int max = (num1 > num2)? num1 : num2;
System.out.println(max);  => 8
profile
웹 개발자 공부 중

0개의 댓글