Language/Java

3. 연산자

리져니 2021. 7. 1. 19:35

 

종류 연산자 설명
산술 연산자 + * - / % << >> 사칙연산, 나머지연산(%)
비교 연산자 > < >= <= == != 크고 작음과 같고 다름을 비교
논리 연산자 && || ! & | ^ ~ 그리고(AND)와 또는(OR)으로 조건을 연결
대입 연산자 = 우변의 값을 좌변에 저장

 

문자형의 더하기 연산

char c1 = 'a';
char c2 = c1 + 1;  //컴파일 애러
char c2 = 'a' + 1; //결과값: b, 정상 동작

'a'+1 이 리터럴 간의 연산이기 때문에 컴파일 애러가 발생하지 않는다.

그러나, 수식에 변수가 들어가 있는 경우에는 컴파일러가 미리 계산을 할 수 없기 때문에 형변환을 해주어야 한다. 그렇지 않으면 컴파일 애러가 발생한다.

char c2 = (char) (c1 + 1);  //결과값: b

 

문자열의 비교

두 문자열을 비교할 때는 equals()라는 메서드를 사용해야 한다. 

String str = new String("abc");
boolean result = str.equals("abc");

만일 대소문자를 구별하지 않고 비교하고 싶다면 equalsIgnoreCase()를 사용하면 된다.

 

비트 전환 연산자(~)

피연산자를 2진수로 표현했을 때, 0은 1로, 1은 0으로 바꾼다.

비트 전환 연산자에 의해 비트 전환되고 나면, 부호있는 타입의 피연산자는 부호가 반대로 변경된다.

즉, 피연산자의 1의 보수를 얻을수 있다. 그래서 비트 전환연산자를 '1의 보수 연산자' 라고도 한다

 

1의 보수

1의 보수는 대부분의 산술연산에서 원래 숫자의 음수처럼 취급된다. 주어진 이진수와 자리수가 같고 모든 자리가 1인 수에서 주어진 수를 빼서 얻은 수가 1의 보수이다. 혹은 주어진 이진수의 모든 자리의 숫자를 반전(0을 1로, 1을 0으로)시키면 1의 보수를 얻을 수 있다.

10에 대한 1의 보수

2의 보수

1의 보수에 1을 더한값.

 

 

보수가 필요한 이유,

컴퓨터는 1과 0으로만 이해할 수 있기 때문에 음수라는 개념이 없음. 그래서 연산을 할때 음수 표현을 위해 보수를 씀.

 * 'n의 보수'는 '어떤 수에 대해 n의 제곱수가 되도록 만드는 수' 

*  n진법에는 n의 보수와 n-1의 보수가 쓰인다

 

 

쉬프트 연산자

피연산자의 각 자리(2진수로 표현했을 때)를 오른쪽(>>) 또는 왼쪽(<<)으로 이동한다.

이동 후, 저장범위를 벗어난 값들은 버려지고, 빈자리는 0으로 채워진다.

ex ) 8 << 2 

 

단항 연산자

증감 연산자(++): 피연산자의 값을 1 증가시킨다.

감소 연산자(--): 피연산자의 값을 1 감소시킨다.

타입 설명
전위형 값이 참조되기 전에 증가시킨다 j = ++i;
후위형 값이 참조된 후에 증가시킨다 j = i++;

* 그러나 ++i와 i++처럼 증감연산자가 수식이나 메서드 호출에 포함되지 않고 독립적인 하나의 문장으로 쓰인 경우에는 전위형과 후휘형의 차이가 없다.

 

 

조건 연산자

첫번째 피연산자인 조건식의 평가결과에 따라 다른 결과를 반환한다.

조건식의 평가결과가 true이면 식1이, false이면 식2가 연산결과가 된다.

728x90