연산자

황찬호·2021년 4월 23일

JAVA

목록 보기
1/5

연산자

1. 연산자의 종류

  1. 산술 연산자
    +, -, *, /, %, <<, >> : 사칙연산과 나머지 연산

  2. 비교 연산자
    >, <, >=, <=, ==, != : 크고 작음과 같고 다름을 비교

  3. 논리 연산자
    &&, ||, !, &, |, ^, ~ : '그리고(AND)'와 '또는(OR)'으로 조건을 연결

  4. 대입 연산자
    = : 우변의 값을 좌변에 저장

  5. 기타
    (type) ?: instanceof : 형변환 연산자, 삼항 연산자, instanceof연산자

2. 주의해야 할 연산자 우선순위의 예

  • x << 2 + 1 : 쉬프트연산자(<<)는 덧셈연산자보다 우선순위가 낮다. 그래서 왼쪽의 식은 ' x << ( 2 + 1 ) '과 같다.

  • data & 0xff == 0 : 논리연산자(&)는 비교연산자(==)보다 우선순위가 낮으므로 비교연산 후에 논리연산이 수행된다. 그래서 왼쪽의 식은 ' data & (0xFF == 0) '과 같다.

  • x < -1 || x > 3 && x < 5 : 논리연산자중에서 AND를 의미하는 ' && ' 가 OR을 의미하는 ' || ' 보다 우선순위가 높다. 이처럼 수식에 AND와 OR가 함께 사용되는 경우에는 다음과 같이 괄호를 사용해서 우선순위를 명확히 하는 것이 좋다. x < -1 || ( x > 3 && x < 5 )

3. 산술변환

산술변환이란, 연산 직전에 발생하는 자동 형변환이다. 산술변환의 규칙은 다음과 같다.
* 모든 연산에서 '산술 변환'이 이루어지지만, 쉬프트 연산자(<<, >>), 증감 연산자(++, --)는 예외이다.

1. 두 피연산자의 타입을 같게 일치시킨다.(보다 큰타입으로 일치)

- 이항 연산자는 두 피연산자의 타입이 일치해야 연산이 가능하므로, 피연산자의 타입이 서로 다르다면 연산 전에 형변환연산자로 타입을 일치시켜야 한다. 대부분의 경우 두 피연산자의 타입 중에서 더 큰 타입으로 일치시키는데, 그 이유는 작은타입으로 형변환하면 원래의 값이 손실될 가능성이 있기 때문이다.
* 작은 타입에서 큰 타입으로 형변환하는 경우, 자동적으로 형변환되므로 형변환 연산자를 생략할 수 있다.

2. 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.

- 정수형의 기본 타입인 int가 가장 효율적으로 처리할 수 있는 타입이기 때문에 int보다 작은타입인 char나 short일 경우 자동으로 int형으로 형변환된다. 이유는 오버플로우(overflow)가 발생할 가능성이 높기 때문이다.

4. 등가 비교연산자

== : 두 값이 같으면, true 아니면 false
!= : 두 값이 다르면, true 아니면 false

문자열 비교

두 문자열을 비교할 때는, 비교 연산자 '==' 대신 equals()라는 메서드를 사용해야 한다. 비교 연산자는 두 문자열이 완전히 같은 것인지 비교할 뿐이므로, 문자열의 내용이 같은지 비교하기 위해서는 equals()를 사용하는 것이다.

String str = new String("abc");
		
// equals()는 두 문자열의 내용이 같으면 true, 다르면 false
boolean result = str.equals("abc"); // 내용이 같으므로 result에 true가 저장

* 대소문자를 구별하지 않고 비교하고 싶으면, equals()대신 equalsIgnoreCase()를 사용하면 된다.

5. 논리 연산자

|| (OR결합) : 피연산자 중 어느 한 쪽만 true이면 true를 결과로 얻는다.
&& (AND결합) : 피연산자 양쪽 모두 true이여야 true를 결과로 얻는다.

1. i는 2의 배수 또는 3의 배수이다.

어떤 수가 2의 배수라는 애기는 2로 나누었을 때 나머지가 0이라는 뜻이다. 그래서 나머지연산의 결과가 0인지 확인하면 된다. '또는'으로 두 조건이 열결되었으므로 논리 연산자'\'(OR)을 사용해야 한다.

	i%2==0 || i%3==0

i의 값이 8일 때, 위의 식은 다음과 같은 과정으로 연산된다.

	8%2==0 || 8%3==0
	  0==0 || 2==0
	  true || false
	      true

2. i는 2의 배수 또는 3의 배수지만 6의 배수는 아니다.

이전 조건에 6의 배수를 제외하는 조건이 더 붙었다. 6의 배수가 아니어야 한다는 조건은 'i%6!=0'이고, 이 조건을 '&&(AND)'로 연결해야 한다.

	( i%2==0 || i%3==0 ) && i%6!=0

3. 문자 ch는 숫자('0'~'9')이다.

사용자로부터 입력된 문자가 숫자('0'~'9')인지 확인하는 식은 다음과 같이 쓸 수 있다.

	'0' <= ch && ch <= '9'

논리 연산자 응용

import java.util.Scanner;

public class OperatorEx25 {

public static void main(String[] args) {
		
	Scanner sc = new Scanner(System.in);
	char ch = ' ';
		
	System.out.println("문자를 하나 입력하세요.> ");
		
	String inp = sc.nextLine();
	ch = inp.charAt(0);
		
	if('0' <= ch && ch <= '9') {
		System.out.print("입력하신 문자는 숫자입니다.\n");
	}
	if('a' <= ch && ch <= 'z') {
		System.out.print("입력하신 문자는 영문자입니다.\n");
	}
		
}

}

논리 부정 연산자 !

이 연산자는 피연산자가 true이면 false를, false이면 true를 결과로 반환한다.

	// 1번 코드보다 2번 코드가 이해하기가 더 쉽다.
	ch < 'a' || ch > 'z'		// 1번
	!( 'a' <= ch && ch <= 'z' )	// 2번
	

6. 그 외 연산자

조건 연산자

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

	result = (x > y) ? x : y; // result = (조건식) ? 식1 : 식2;

위의 문장에서 식 'x > y'의 결과가 true이면, 변수 result에는 x의 값이 저장되고, false이면 y의 값이 저장된다.

만약 x의 값이 5, y의 값이 3이라면, 이 식은 다음과 같은 과정으로 계산된다.

	result = (x > y) ? x : y;
	result = (5 > 3) ? 5 : 3;
	result = (true) ? 5 : 3;
	result = 5;

* if문 대신 조건연산자를 사용하여 코드를 간략하게 작성할 수 있다.

복합 대입 연산자

대입 연산자는 다른 연산자(op)와 결합하여 'op='와 같은 방식으로 사용될 수 있다. 예를 들면, 'i = i + 3'은 'i += 3'과 같이 표현될 수 있다. 그리고 결합된 두 연산자는 반드시 공백없이 붙여 써야 한다.

  • 복합 대입 연산자의 종류
profile
천천히 그리고 꾸준히

0개의 댓글