본문 바로가기
Challenge

3주차 과제: 연산자

by Daisy :) 2020. 11. 25.
반응형

연산자(operator) → 연산을 수행하는 기호(+,-,*,/)등

피연산자(operand) → 연산자의 작업 대상(변수, 상수, 리터럴, 수식 등) 

산술연산자 

+,-,*,/,%  사칙연산과 나머지연산(%)을 산술연산이라고 칭합니다. 

 

컴퓨터는 내부적으로 이진수 변환을 한 이후에 이진수를 토대로 자연수를 이해하기 떄문에 직접적인 비트연산인 경우 연산의 속도가 빨라집니다.

 

우선  10진수를 2진수로 변환하는 방법은 아래와 같습니다. 

비트 연산자

연산자

설명

&

논리곱(and)

비트를 비교하여 양쪽 모두 1이면 1, 아니면 0을 반환

| 논리합(or) 각 비트를 비교하여 어느 한쪽이 1이면 1 아니면 0을 반환
^ 베타적 논리합(xor) 각 비트를 비교하여 한쪽이 1이고 다른 한쪽이 0이면 1을 아이면 0을 반환 
~ 1의 보수 표현(not) 각 비트를 반전시킨 값을 반환 
<< 왼쪽 쉬프트 연산자 180<<2 , 180을 왼쪽으로 2비트만큼 이동
>> 오른쪽 쉬프트 연산자 180>>2, 180을 오른쪽으로 2비트만큼 이동 

위의 코드에서 i와 j로만 계산할 경우 자동으로 10진수로 변환하기때문에 Integer.toBinaryString()메서드를 이용해서 2진수를 출력할 수 있도록 합니다.

~i를 계산한 경우에 32자리로 나오게 되는데 이 이유는 java의 int가 32비트의 크기를 가지고 있기때문에 다른 연산에서는 앞자리가 0이라 생략되었지만 ~연산에서는 0이 1로 반전되면서 32자리가 모두 출력되게 됩니다.

 

관계 연산자

관계연산자는 비교연산자라고도 하며, 쉽게 설명하면 부등호입니다.

관계연산자의 결과는 true 또는 false의 값인 boolean 자료형으로 변환됩니다.

 

연산자

설명

>

왼쪽이 크면 true 아니면 false를 반환 

num > 5;

<

왼쪽이 작으면 true 아니면 false를 반환 

num < 5;

>=

왼쪽항이 오른쪽보다 크거나 같으면  true 
아니면 false를 반환 

num >=5;

<=

왼쪽항이 오른쪽보다 작거나 같으면  true 
아니면 false를 반환 

num <= 5;

==

왼쪽항과 오른쪽항이 같으면 true, 아니면 false 반환 

num ==5;

!=

왼쪽항과 오른쪽항이 다르면 true, 아니면 false 반환

num != 5;

논리 연산자

논리연산자는 boolean 형의 값을 가질 수 있는 자료형에 대해서만 적용가능합니다.

OR연산자 ||   피연산자 중 어느 한 쪽이 true이면 true이다.
AND연산자 && 피연산자 중 양쪽 모두 true일 경우 true이다.
논리부정연산자 ! 피연산자가 true이면 false, false이면 true를 반환한다.

 x

y

x||y

X&&y

true

true

true

true

true

false

true

false

false

true

true

false

false

false

false

false

 

 

instanceof

참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 instanceof 연산자를 사용합니다.

instanceof의 사용형식은 객체 + instanceof +  클래스입니다. 

또한 연산의 결과를 boolean값인 true와 false중의 하나를 반환합니다.

 

instanceof를 이용한 연산결과로 true를 얻었다는 것은 참조변수가 검사한 타입으로 형변환이 가능하다는 것을 의미합니다.

 

 

assignment(=) operator

대입연산자 또는 할당연산자라고 하며, 오른쪽 피연산자의 값을 왼쪽 피연산자에 저장하고 그 저장된 값은 연산결과로 반환합니다.

대입연산자의 왼쪽 피연산자를 lvalue(left value)라고 하며, 오른쪽 피연산자를 rvalue(right value)라고 합니다. 

대입연산자의 rvalue는 변수 뿐 아니라 식이나 상수등 모두 가능하지만, lvalue는 반드시 변수처럼 값을 변경할 수 있는것이어야합니다. 따라서 리터럴이나 상수처럼 값을 저장할 수 없는것들은 lvalue가 될 수 없습니다.

대입 연산자 설명
= 왼쪽의 피연산자에 오른쪽의 피연산자를 대입함.
+= 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결괏값을 왼쪽의 피연산자에 대입함.
-= 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후, 그 결괏값을 왼쪽의 피연산자에 대입함.
*= 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, 그 결괏값을 왼쪽의 피연산자에 대입함.
/= 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 결괏값을 왼쪽의 피연산자에 대입함.
%= 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 나머지를 왼쪽의 피연산자에 대입함.

화살표(->) 연산자 (Lambda)

java8로 부터 도입된 함수 지향적 표현 방식으로 병렬 처리와 이벤트 지향 프로그래밍에 적합합니다.

(코드의 간소화, 가독성 향상되지만 재사용이 불가하고 디버깅이 까다로워 짐)

 

java에서 Lambda를 사용하기 위한 조건 -> 단 한개의 추상메서드만 가지는 인터페이스가 필요합니다.

 

3항 연산자

3항연산자란 '조건식?식1:식2' 로 표현하며 조건식이 true이면 식1을 출력하고 false이면 식2를 출력하게 됩니다. 

 

연산자 우선 순위

1. 산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행이 됩니다.

2. 단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높습니다.

3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행 방향은 왼쪽에서 오른쪽 입니다. 

 

종류 결합규칙 연산자 우선순위
단항 연산자 <--------------------- ++ -- + - ~ ! 높음





































낮음
산술 연산자 ----------------------> * / %
----------------------> + -
----------------------> << >>
비교 연산자 ----------------------> < > <== >== instanceof
----------------------> == !=
논리 연산자 ----------------------> &
----------------------> ^
----------------------> |
----------------------> &&
----------------------> ||
삼항 연산자 ----------------------> ?:
대입 연산자 <--------------------- = += -= *= /= %= <<= >>= &= ^= |=

(optional) Java 13. switch 연산자

 

기존 switch문에서 사용되던 반환 키워드 break가 java13버전부터 yield로 변경되었습니다.

break를 이용한 값 반환 방법이 없어지고 그 대신 yield를 사용할 수 있도록 한 것 입니다. 

 

 

 

<Reference>

자바의 정석 저자 남궁 성

www.w3schools.com/java/java_operators.asp

docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

반응형

댓글