본문 바로가기
Hello World/JAVA

JAVA - Operator 연산자 [개발스터디 기몬]

by 기몬 2023. 3. 2.
728x90
반응형

 연산자 Operator
프로그래밍 언어는 일반적으로 수학연산과 유사한
연산자의 집합을 지원한다. 언어는 내장된 연사자의 정해진 숫자를
포함할 수 있다 아니면 프로그래머가 정의한 연산자의 생성을 허용할 수 있다.

연산자는 항이 있다.
연산자의 항에는 변수, 리터럴, 함수 등이 올 수있다.
모든 연산자는 항상 결과값이 존재한다.
특징 : 연산자는 항상 항이 값으로 바뀐 다음 연산이 시작된다.


부호 / 증감 연산자
부호 연산자
- 부호 연산자는 변수의 부호를 유지하거나 변경
+ 피연산자 피연산자의 부호 유지
- 피연산자 피연산자의 부호 변경

증감 연산자
-증감 연산자는 변수의 값을 1 증가시키거나 1 감소시킴
++ 피연산자 피연산자의 값을 1 증가시킴
-- 피연산자 피연산자의 값을 1 감소시킴
피연산자 ++ 다른 연산을 수행한 후에 피연산자의 값을 1 증가시킴
피연산자 -- 다른 연산을 수행한 후에 피연산자의 값을 1 감소시킴

++ : 변수 + 1 / 변수++ : / ++변수 :
--   : 변수 - 1 / 변수-- : / --변수 :
증감연산자 / 피연산자 : 연산식에서 증감연산자를 피연산자 앞에
사용하면 단항연산자로서 우선순위를 먼저 준다
피연산자 / 증감연산가 : 연산식의 우선순위가 바뀐다_
대입연산자 다음으로 증감연산된다.

산술연산자
- 더하기 (+), 빼기 (-), 곱하기(*), 나누기(/), 나머지(%)로 총5개
피연산자 + 피연산자 덧셈 연산
피연산자 - 피연산자 뺄심 연산
피연산자 *  피연산자 곱셈 연산
피연산자  /  피연산자 나눗셈 연산
피연산자 %  피연산자 나눗셈의 나머지를 산출하는 연산


오버플로우
- 타입이 허용하는 최대값을 벗어나는 것

언더플로우
- 타입이 허용하는 최소값을 벗어나는 것

/// 양수에서 오버플로우가 되면 음수가 된다
/// 음수에서 언더플로우가 되면 양수가 된다

오버플로우
언더플로우



정확한 연산은 정수 연산으로
- 산술 연산을 정확하게 계산하려면 실수 타입을 사용하지 않는 것이 좋음
- 정확한 계산이 필요하면 정수 연산으로 변경

 





나눗셈 연산 후 NaN과 Infinity 처리
나눗셈 연산에서 예외 방지하기

- 나눗셈(/) 또는 나머지(%) 연산에서 좌측 피연산자가 정수이고
우측 피연산자가 0일 경우ArithmeticExcaption 발생
- 좌측 피연산자가 실수이거나 우측 피연산자가 0.0 또는 0.0f이면
예외가 발생하지 않고 연산의 결과는 Infinity(무한대) 또는 NaN(Not a Number)이 됨

ex)
5 / 0.0 --> Infinity
5 % 0.0 --> NaN

- Infinity 또는 NaN 상태에서 계속해서 연산을 수행하면 안됨

- Double.isInfinie()를 사용해 /와 %연산의 결과가 Infinity 또는 NaN인지
먼저 확인하고 다음 연산을 수행하는 것이 좋음


비교연산자
- 비교연산자는 동등 (==, !=) 또는 크기 (<, <=, >, >=)를 평가해서 boolean 타입인 true/false를 산출
- 흐름 제어문인 조건문(if), 반복문(for, while)에서 실행 흐름을 제어할 때 주로 사용
- 문자열을 비교할 때는 동등(==, !=) 연산자 대신 equals()와 !equals()를 사용


논리 연산자
- 논리곱(&&), 논리합(||), 배차적 논리합(^) 그리고 논리 부정(!) 연산을 수행
- 흐름 제어문인 조건문(if), 반복문(for, while) 등에서 주로 사용

논리연산자





비트 논리 연산자
- bit 단위로 논리 연산을 수행. 0과 1이 피연산자가 됨
- byte, short, int, long 만 피연산자가 될 수 있고, float, double은 피연산자가 될 수 없음
(정수만 해당)
AND(논리곱)  &  /  OR(논리합) |  /  XOR(배타적 논리합) ^ /  NOT(논리 부정) ~


비트 이동 연산자 (= bit shift operator)
- 비트를 좌측 또는 우측으로 밀어서 이동시키는 연산을 수행

 

대입 연산자
- 우측 피연산자의 값을 죄측 피연산자인 변수에 대입.
우측 피연산자에는 리터럴 및 변수, 다른 연산식이 올 수 있음.
- 단순히 값을 대입하는 단순 대입 연산자와 정해진 연산을 수행한 후
결과를 대입하는 복합 대입 연산자가 있음

 

 삼항 연산자
- 총 3개의 피연산자를 가짐
- ? 앞의 피연산자는 boolean 변수 또는 조건식.
이 값이 true 이면 콜론(:) 앞의 피연산자가 선택되고,
false 이면 콜론 뒤의 피연산자가 선택됨

 

 연산의 방향과 우선순위
연신이 수행되는 순서
- 덧셈(+), 뺄셈(-), 연산자보다는 곱셈(*), 나눗셈(/) 연산자가 우선.
&&보다는 >, < 가 우선순위가 높음
- 우선순위가 같은 연산자의 경우 대부분 왼쪽에서부터 오른쪽으로 (->) 연산을 수행

BUT 예외로 오른쪽에서부터 왼쪽으로 연산을 수행하는 것 : 단항 연산자, 대입 연산자.

연산의 우선순위 예외 _ 단항연산자
연산의  우선순위 예외_ 대입연산자

 

 



연산자

1항 -, +, !, ( ), ++, --


2항 - 산술 +, -, *, /, %(나머지 연산자)

- 비트 시프트   <<, >>,  >>>

- 관계 (비교) <, >, <=, >=, ==, !=

- 비트 논리 $, |, ^, ~

- 논리(boolean) &&(and), ||(or), ^(xor)
배타적 논리합(排他的論理合, exclusive or)은
* 수리 논리학에서 주어진 2개의 명제 가운데 1개만 참일 경우를 \
* 판단하는 논리 연산이다. 약칭으로 XOR, EOR, EXOR라고도 쓴다.
\(유니코드: U+2295 ⊕), +, ≠라고도 쓴다.: 양쪽항이 다를 때 참이다.
ex ) 3 + 4 > 10  &&  true // error : bad operand types for binary operator '&&'
first type : int

3항 조건식 ? 식 : 식                     ex)  :   (int)(Math.random()*100)%2==0 ? "even" : "odd";

피연산자 뒤에 오는  ++, --
대입 =,  +=, -+, *=, /=, %=
: 가장 마지막에 연산된다. 무조건 ! 마지막에 연산된다.

##### 연산자의 우선순위 1항 - 2항 (산술 - 관계 - 논리) - 3항 #####



연산의 과정을 기술하는 것 : 연산식.
-연산식에서는 단항연산자가 처음으로 연산된다.
-대입 연산자는 가장 마지막에 연산된다.  
대입연산자의 오른쪽은 연산식
비연산자 =(대입연산자) [연산식]

연산식은 연산자의 우선순위를 고려해야 한다.
ex ) int num2 = -num + 10;

연산식의 연산자의 우선순위가 같을 때는 순서대로 연산된다.
수식을 프로그래밍에서는 연산식이라고 함.

 

참고

https://www.informit.com/articles/article.aspx?p=22065&seqNum=6

728x90
반응형

댓글