산술 연산자
사칙연산을 다루는 연산자로, 가장 기본적이면서도 가장 많이 사용되는 연산자 중 하나이다.
산술 연산자 | 설명 |
+ | 왼쪽의 피연산자에 오른쪽의 피연산자를 더함 |
- | 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺌 |
* | 왼쪽의 피연산자에 오른쪽의 피연산자를 곱함 |
/ | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눔 |
% | 왼쪽의 피연산자를 오른쪽의 피연산자로 나눈 후, 그 나머지를 반환 |
+ 연산자
+연산자는 위의 코드와 같이 정수형을 더하는 데 사용하는데도 쓰일 수 있고, 문자열을 합치는데도 사용이 가능하다.
- 연산자
-연산자는 정수형에서는 사용할 수 있지만 +연산자와는 다르게 문자열을 뺄 수는 없다.
만약 문자열을 빼고 싶다면
위의 코드처럼 substring()을 사용하면 된다.
* 연산자
*연산자는 단순하게 x와y값을 곱하고 싶을 때 사용하는 연산자이고, 문자열에는 적용할 수 없다.
/ 연산자
/연산자는 y에서x를 나눈 몫을 구하는 연산자이다.
%연산자
%연산자는 y에서x를 나눈 후 나머지를 반환해주는 연산자이다.
비트 연산자
논리연산자와 비슷한 형태이지만, 비트(bit)단위로 논리 연산을 할 때 사용하는 연산자이다.
비트 연산자 | 설명 |
& | 대응되는 비트가 모두 1이면 1을 반환함(AND연산) |
| | 대응되는 비트 중에서 하나라도 1이면 1을 반환함(OR연산) |
^ | 대응되는 비트가 서로 다르면 1을 반환함(XOR연산) |
~ | 비트를 1이면 0으로, 0이면 1으로 반전(NOT연산) |
<< | 명시된 수만큼 비트들을 전부 왼쪽으로 이동(Left Shift연산) |
>> | 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동(Right Shift연산) |
>>> | 지정한 수만큼 비트를 전부 오른쪽으로 이동, 새로운 비트는 전부0 |
& 연산자
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
& & & & & & & &
1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
↓
0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
위와 같이 대응되는 비트가 모두 1인 경우에만 1을 반환한다.
| 연산자
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
^ ^ ^ ^ ^ ^ ^ ^
1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
↓
1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
위와 같이 대응되는 비트 중 1이 하나라도 있다면 1을 반환한다.
^ 연산자
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
| | | | | | | |
1 | 0 | 0 | 0 | 1 | 1 | 0 | 1 |
↓
1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
위와 같이 대응되는 비트가 서로 다른 경우에는 1을 반환한다.
~ 연산자
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
~ ~ ~ ~ ~ ~ ~ ~
↓
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
위와 같이 ~연산자를 사용하면 1인 비트를 0으로, 0인 비트를 1로 변환한다.
>>, <<, >>> 연산자
위의 코드를 실행한 결과가 위의 사진과 같이 나왔는데
<<연산자는 숫자 5를 이진수로 변환 후 각 비트를 3만큼 왼쪽으로 이동시키기 연산자이기 때문에 40이라는 결과가 출력되고, <<연산자연산을 하고 빈자리는 0으로 채워진다.
>>연산자는 반대로 숫자 5를 이진수로 변환 후 각 비트를 3만큼 오른쪽으로 이동하기 때문에 0이라는 결과가 출력되고, >>연산자연산을 하고 빈자리는 최상위 부호비트로 채워지게 된다.
>>>연산자는 숫자5의 각 비트를 3만큼 오른쪽으로 이동하고, 빈자리는 0으로 채운다.
그럼 >> 연산자와의 차이는 바로 빈자리를 >>>연산자는 최상위부호비트와는 상관없이 0으로 채운다.
'JAVA' 카테고리의 다른 글
[JAVA] 클래스정의&종류 (0) | 2023.04.03 |
---|---|
[JAVA] 함수형 인터페이스 & (->)람다식 (0) | 2023.04.02 |
[JAVA] 타입변환&타입추론 var (0) | 2023.03.22 |
[JAVA] 리터럴변수&변수의스코프와 라이프타임 (0) | 2023.03.21 |
[JAVA] Primitive Type vs Reference Type (0) | 2023.03.21 |