▶ JAVA/개념정리

[Java] 5. 연산자(2)

휴학생감자 2022. 1. 28. 23:08

1. 비교 연산자

 

대소비교 연산자 (< , > , <= , >=)

기본형에서는 boolean형을 제외한 나머지 자료형에 사용 가능하며, 참조형에는 사용할 수 없다.

 

등가비교 연산자 (== , !=) 

기본형과 참조형에 모두 사용 가능하다.

이때, 참조형에 사용하면 객체의 주소값을 비교하므로 사용 시 주의해야 한다. 

 

※ 문자열 비교

두개의 문자열을 비교할 때에는 등가비교 연산자가 아닌 equals() 메서드를 사용해야 한다.

 

Ex. String str = 'dakveloper'

       boolean result = str.equals("dakveloper")

       결과 : true

 

+) 자바는 대소문자를 구분하므로 문자열 비교 시 대소문자에 유의해야 한다.

     대소문자를 구분하지 않고 비교하려면 equalsIgnoreCase()를 사용하면 된다.

 

 

2. 논리 연산자

 

논리 연산자는 두개 이상의 조건을 하나의 식으로 표현하도록 한다.


|| (OR 결합 연산자) : 두개의 조건 중 하나만 true이면 결과는 true

&& (AND 결합 연산자) : 두개의 조건이 모두 true일 때만 결과가 true

 

Ex1) K는 2의 배수이면서 3의 배수이다.

          → K%2 == 0 && K%3 == 0

 

Ex2) K는 2의 배수 또는 3의 배수이지만 6의 배수는 아니다.

          → (K%2 == 0 || K%3 == 0) && K%6 != 0

(&&연산자는 ||연산자보다 우선순위가 높기 때문에 먼저 계산하고 싶은 조건에 괄호를 반드시 붙여야 한다!!)

 

Ex3) 문자 K는 소문자 또는 대문자이다.

          → ('a' <= K && k <= 'z') || ('A' <= K && K <= 'Z')

 

☆ 피연산자의 위치에 따라 계산속도가 달라질 수 있다.

||연산자의 경우 두개의 조건식 중 한가지만 성립하면 전체 결과가 true가 되므로

앞에 있는 조건식이 true인 경우 뒤의 조건식은 평가하지 않는다.

&&연산자의 경우에도 앞에 있는 조건식이 false이면 뒤의 조건식은 평가하지 않고 넘어간다.

 

 

3. 비트 연산자

 

| (OR 연산자) : 피연산자 중 한쪽이 1이면 결과가 1이다. 그 외의 경우는 0이다.

& (AND 연산자) : 피연산자의 값이 모두 1일 때 결과가 1이다. 그 외의 경우는 0이다.

^ (XOR 연산자) : 피연산자의 값이 서로 다르면 결과가 1이다. 같을 때는 0이다.

~ (비트 전환 연산자) : 피연산자를 2진수로 표현했을 때, 0은 1로, 1은 0으로 바꿔준다.

 

<< , >> (쉬프트 연산자) : 왼쪽에 있는 피연산자의 2진수를 오른쪽 피연산자만큼 왼쪽/오른쪽으로 이동시킨다.

Ex. 8 << 2           1) 8은 2진수로 00001000

                              2) 2진수를 왼쪽으로 2자리 이동시키면 00001000_ _

                                   저장범위를 벗어난 자릿수는 버려지고, 빈자리(_)는 0으로 채운다. 

                              3) 결과는 00100000 (10진수 32)가 된다.

 

(우측 쉬프트 연산자의 경우에는 부호비트의 유지를 위해 왼쪽 피연산자가 음수인 경우 빈자리는 1로 채운다.)

 

2진수는 각 자리수가 2의 제곱수이므로 쉬프트 연산자를 수행하면 2ⁿ 만큼 곱한거나 나눈 값과 같아진다.

 

# 쉬프트 연산

x<<n 의 결과 : x * 2ⁿ

x>>n 의 결과 : x / 2ⁿ

 

 

4. 조건, 대입 연산자

 

① 조건 연산자 (조건식? 식1 : 식2)

 

유일한 삼항 연산자로 3개의 피연산자를 가진다.

조건식의 결과가 true이면 식1의 값이, false이면 식2의 값이 연산결과로 저장된다.

 

조건 연산자는 중첩이 가능하므로 간략하게 식을 쓸 수 있다.

간단한 조건식의 경우에는 if문보다 조건 연산자를 사용하는 것이 가독성이 좋다.

그러나, 여러 번의 중첩이 이루어지면 식이 복잡해 질 수 있으므로 필요 시에 1번만 중첩하여 사용하도록 한다.

 

Ex. int X = 3

       int Y = 1

       int result = X<=0 ? X : Y

결과 : result의 값은 1이 된다.


② 대입 연산자 (=, op=)

 

대입 연산자는 변수에 값 또는 수식의 연산결과를 저장하는데 사용한다.

(오른쪽 피연산자의 값을 왼쪽의 피연산자에 저장)

연산자들 중 우선순위가 가장 낮으므로 모든 계산이 끝나고 마지막에 수행된다.

또한, 연산의 진행 방향이 오른쪽에서 왼쪽이라는 특징이 있다.

 

Ex. K = 3

왼쪽의 피연산자인 K를  lvalue(left value), 오른쪽의 피연산인 3을 rvalue(right value)라고 한다.

 

여기서 rvalue는 변수, 식, 상수 등 모두 가능하지만, lvalue는 변수와 같이 값을 변경할 수 있는 것이어야 한다.

즉, lvalue에는 리터럴이나 상수와 같이 값이 고정된 것은 사용할 수 없다.


op=는 복합 대입 연산자로 다른 연산자와 결합한 형태를 말한다.

예를 들어, i = i + 1은 i += 1과 같이 표현할 수 있으며 여기서 사용한 +=는 복합 대입 연산자이다.

 

복합 대입 연산자의 종류로는 +=, -=, *=, /=, %= 등이 있다.주의할 점은 i *= 5 + k와 같은 형태는 i = i * 5 + k가 아닌, i = i * (5 + k)이라는 것이다.우변의 피연산자가 둘 이상의 항이어도 계산할 때는 하나의 묶음으로 계산해야 한다.

 

 

 

 

'▶ JAVA > 개념정리' 카테고리의 다른 글

[Java] 7. 반복문  (0) 2022.02.03
[Java] 6. 조건문  (0) 2022.02.02
[Java] 4. 연산자(1)  (0) 2022.01.27
[Java] 3. 오버플로우, 형변환(기본)  (0) 2022.01.26
[Java] 2. 진법과 2의 보수법  (0) 2022.01.24