1. 연산자(operator)

1.1 연산자와 피연산자

연산자(operator) 연산을 수행하는 기호(+,-,*,/ 등)
피연산자(operand) 연산자의 작업 대상(변수, 상수, 리터럴, 수식)
연삱자는 피연산자로 연산을 수행하고 나면 항상 결과값을 반환한다.

1.2 식과 대입 연산자

연산자와 피연산자를 조합하여 계산하고자하는 바를 표현한 것을 '식'이라고 한다. 그리고 식을 계산하여 결과를 얻는 것을 '식을 평가한다'고 한다.

1.3 연산자의 종류

산술 연산자 : + - * / % << >>
비교 연산자 : > < >= <= == !=
논리 연산자 : && || ! & | ^ ~
대입 연산자 : =
기타 (type) ?: instanceof

연산자가 세개면 '삼항 연산자'

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

곱셈과 나눗셈은 덧셈과 뺄셈보다 우선순위가 높다.
논리 연산자 '&&'보다 비교 연산자가 먼저 수행된다.
대입 연산자는 연산자 중에서 제일 우선순위가 낮다.

대부분은 왼쪽에서 오른쪽의 순서로 연산을 수행하고, 단항 연산자와 대입 연산자만 그 반대로, 오른쪽에서 왼쪽의 순서로 연산을 수행한다.

1.산술 > 비교 > 논리 > 대입. 대입은 제일 마지막에 수행된다.
2.단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높다.
3.단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.

1.5 산술변환(usual artithmetic conversion)

이항 연산자는 두 피연산자의 타입이 일치해야 연산이 가능하므로, 피연산자의 타입이 서로 다르다면 연산 전에 형변환 연산자로 타입을 일치시켜야한다.
int i = 10;
float f = 20.0f;
float result = f + (float)i; //형변환으로 두 피연산자의 타입을 일치

대부분의 경우 더 큰 타입으로 일치시키는데, 그 이유는 작은값으로 하면 데이터 손실이 발생할 수 있기 때문이다.

long + int -> lomg + long -> long
float + int -> float + float -> float
double + float -> double + double -> double

피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.
byte + short -> int + int -> int
char + short -> int + int -> int

피연산자의 값손실을 최소화하기 위한 것, 정수형의 기본 타입인 int가 가장 효율적으로 처리할 수 있는 타입
char나 short의 표현범위가 좁아서 연산중에 오버플로우가 발생할 가능성이 높기 때문에 만들어진 것이다.

산술변환이란? 연산 수행 직전에 발생하는 피연산자의 자동 형변환
1.두 피연산자의 타입을 같게 일치시킨다(보다 큰 타입으로 일치)
2.피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.

2. 단항 연산자

2.1 증감 연산자 ++,--

증감연산자는 피연산자에 저장된 값을 1증가 또는 감소시킨다.
증가 연산자(++) 피연산자의 값을 1 증가시킨다.
감소 연산자(--) 피연산자의 값을 1 감소시킨다.

피연산자의 왼쪽에 위치하면 전위형, 오른쪽에 위치하면 후위형

전위형 : 값이 참조되기 전에 증가시킨다. j = ++i;
후위형 : 값이 참조된 후에 증가시킨다. j = i++;
다른 수식에 포함되거나 메서드의 매개변수로 사용된 경우, 단독으로 사용되지 않은 경우 전위형(++i)과 후위형(i++)의 결과는 다르다.

j = ++i; //전위형

++i; //증가후에
j = i; 참조하여 대입

j = i++; //후위형

j = i; //참조하여 대입 후에
i++; //증가

하나의 식에서 증감연산자의 사용을 최소화하고, 식에 두 번 이상 포함된 변수에 증감연산자를 사용하는 것은 피해야한다.

2.2 부호 연산자 +,-

부호 연산자 '-'는 피연산자의 부호를 반대로 변경한 결과를 반환한다.
boolean형과 char형을 제외한 기본형에만 사용할 수 있다.

3. 산술 연산자

3.1 사칙 연산자 +,-,*,/

피연산자가 정수형인 경우, 나누는 수로 0을 사용할 수 없다.

byte a = 10;
byte b = 20;
byte c = (byte)(a * b); 형변환 안해주면 int로 계산 하기 때문에 값이 제대로 안나옴.

3.2 나머지 연산자 %

나머지 연산자는 왼쪽의 피연산자를 오른쪽 피연산자로 나누고 나머지 값을 결과를 반환
주로 짝수, 홀수 또는 배수 검사등에 사용

4. 비교 연산자

주로 조건문과 반복문의 조건식에 사용, 오직 rtur와 flase 둘 중 하나

4.1 대소비교 연산자 <,>,<=,>=

값의 크기 비교, 참이며 true, 거짓이면 false

4.2 등가비교 연산자 == !=

대소비교 연산자와 달리, 기본형은 물론 참조형, 즉 모든 자료형에 사용 할 수 있다.
기본형의 경우 변수에 저장되어 있는 값이 같은지 알 수 있고, 참조형의 경우 객체의 주소값을 저장하기 때문에 두 개의 피연산자(참조변수)가 같은 객체를 가리키고 있는지 알 수 있다.

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

float타입의 값과 double타입의 값을 비교하려면 double 타입을f loat 타입으로 형 변환 해야한다. 그래야만 올바른 결과를 얻을 수 있다.

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

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

5. 논리 연산자

논리 연산자는 둘 이상의 조건을 '그리고(and)'나 또는(or)'으로 연결하여 하나의 식으로 표현

5.1 논리 연산자 &&,||,!

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

! 연산자는 피연산자가 true이면 false를 falseaus true를 결과로 반환한다.
이러한 연산자의 성질을 이용하면, 한번 누르면 켜지고, 다시 한 번 누르면 꺼지는 TV의 전원버튼과 같은 '토글 버튼(toggle button)을 논리적으로 구현할 수 있다.

5.2 비트 연산자 &,|,^,<<,>>

| (OR연산자) 피 연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.
& (AND연산자) 피 연산자 양 쪽이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다.
^ (XOR연산자) 피 연산자의 값이 서로 다를 때만 1을 결과로 얻는다. 같을 때는 0을 얻는다.

비트 OR연산자 '|'는 주로 특정 비트의 값을 변경할 때 사용한다. 아래의 식은 피연산자 0xAB의 마지막 4 bit를 'F'로 변경하는 방법을 보여준다.

비트 AND연산자'&'는 주로 특정 비트의 값을 뽑아낼 때 사용한다. 아래의 식에서는 피연산자의 마지막 4bit가 어떤 값인지 알아내는데 사용되었다.

6. 그 외의 연산자

6.1 조건 연산자 ? :

조건식 ? 식1 : 식2
조건식의 평가결과 true이면 식1이, false이면 식 2가 연산결과 된다.
result = (x > y) ? x : y
if문으로 바꿔서 사용가능
아래 참고.

if (x > y)
result = x;
else
result = y;

6.2 대입 연산자 =, op=

변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용된다.
lvalue는 왼쪽 피연산자, rvalue 오른쪽 피연산자.

'i = i + 3'은 'i += 3'과 같다.

profile
하루하루 최선을

0개의 댓글