본문 바로가기

JAVA

자바 기초부터 차근차근...(5)

※ 이번에도 역시나 연산자에 대해 정리할 생각이다.

※ 본 게시글은 윤성우의 열혈 JAVA프로그래밍을 기반으로 공부하며 정리한 것입니다.

※ 문제가 있을시 비공개처리 하겠습니다.

 


자바에서 제공하는 단항 연산자

 

 

다음과 같은 수를 보자.

 

+5 , 5 , -3 , 3 

 

이 수의 의미는 수학에서의 의미와 동일하다. 

 

마이너스 기호는 다음과 같이 사용될 수 있다.

 

double e1 = 3.5 ;

double e2 = -e1 ;  // e2에 저장되는 값은 -3.5

 

 

증가 및 감소 연산자가 단항 연산자에서 배워야할 연산자들이다.

 

++ 연산자 -> 피연산자에 저장된 값을 1 증가한다.

-- 연산자 -> 피연산자에 저장된 값을 1 감소한다.

 

 

다음 예제를 보면서 두 연산자의 기능을 확인해본다.(Prefix)

아마 예상한 것과 같은 답이 나올 것이다. (그 연산자가 나온 줄에서 바로 연산이 적용된다.)

 

그럼 이번에 뒤에 연산자를 붙인 예제를 보자.(Postfix)

값을 보면 연산자가 반영되는 시점이 다르다는 것을 알 수 있다.

 

즉, 연산자가 나온 다음에 값이 증가된다는 것을 알 수 있다.

 

같은 라인에 있는 연산이어도 동일하게 진행된다.(궁금하다면 println이 아닌 printf로 출력해보자.)

 

 

 

비트를 대상으로 하는 연산자

 

※ 비트 연산자는 안쓰일 것 같지만 많이 쓰인다.

※ 취업을 준비하기 위한 사람들이라면 알고리즘 테스트에도 가끔 나오니 꼭 알아야 한다.

※ 이것보다 어렵게 나오니 심화과정은 알고리즘 공부하면서 꼭 배우도록 하자.

 

 

비트 연산자는 각각의 비트를 대상으로 연산을 진행하는 연산자이며 피연산자는 반드시 정수여야 한다.

실수를 대상으로 하는 비트 연산은 의미가 없으므로 자바에서 지원하지 않는다.

 

연산자 연산자의 기능(비트 단위) 결합 방향
& AND 연산 =>
| OR 연산 =>
^ XOR 연산 =>
~ 비트를 반전시켜서 얻은 결과 반환 <=

 

다음의 예제를 보면서 연산자를 공부하도록 하자.

 

비트연산을 하기 위해서는 5를 00000101 형식으로 알아야 될 필요가 있다.

(8비트 연산이므로 이건 당연히 알거라 생각하고 생략한다.)

 

& 연산을 하게 되면 00000101 과 00000011 가 and 연산이 진행되므로

00000001 이 값으로 나온다. >>( 둘다 1일때만 1 )

 

두번째 | 연산을 하게 되면 00000101 과 00000011 가 OR 연산이 진행되므로

00000111 이 값으로 나온다. >>( 둘중 하나라도 1이면 1의 연산이 나온다.)

 

세번째 ^ 연산을 하게 되면 XOR 연산이 진행된다.

즉, 두 비트의 값이 서로 다른 경우에 1을 반환하는 연산이다.

 

따라서 세번째 r3의 값은 00000110 이 나오게 된다.

 

네번째 값은 반대로만 하면 되니 쉽게 00000000이 나온다 

 

따라서 다음과 같이 답이 나오게 된다.

 

 

비트 쉬프트 연산자 : << , >> , >>>

 

※ 솔직히 이전보다 비트 쉬프트 연산자가 더 어렵다.

처음 접한다면 약간 생소할수도 있고 이해가 안될수도 있다.

하지만 천천히 공부를 하다보면 깨닫게 되니 열심히 노력하자.

 

 

비트 쉬프트 연산자는 비트 열을 왼쪽 또른 오른쪽으로 이동시킨 결과를 반환하는 연산자이다.

 

이 연산자는 두개의 피연산자가 필요하다(이항 연산자이다.) 또한 모두 정수가 필요하다.

 

연산자 연산자의 기능 결합 방향
<<

피연산자의 비트 열을 왼쪽으로 이동

이동에 따른 빈 공간은 0으로 채움

ex) n<<2

n의 비트 열을 두 칸 왼쪽으로 이동시킨 후 반환.

=>

>>

피연산자의 비트 열을 오른쪽으로 이동

빈 공간은 음수의 경우 1 양수의 경우 0으로 채움

ex)n>>2

n의 비트 열을 두 칸 오른쪽으로 이동시킨 후 반환

=>
>>>

피연산자의 비트 열을 오른쪽으로 이동

이동에 따른 빈 공간은 0으로 채움

ex) n>>>3

n의 비트 열을 두 칸 오른쪽으로 이동 시킨 결과 반환

=>

 

예제를 보면서 의미를 확인해보자.

위의 실행 결과는 다음과 같다.

비트 열을 왼쪽으로 한 칸 밀고 빈 공간을 0으로 채울 때마다 그 값은 두배가 되는 것을 볼 수 있다.

 

또한, -8을 표현할때 11111000 로 하였는데 맨 앞은 부호비트라고 한다 (첫번째가 1이면 음수 0이면 양수)

 

부호비트가 1일때는 1로 채우고 0일때는 0으로 채워지는 것을 알 수 있다.

 

그리고 오른쪽으로 한 칸씩 밀때마다 2로 나눈 결과가 반환되는 것을 알 수 있다.

 

(2비트로 표현하는 방법은 인터넷에 많으니 참고하자.)

 

'JAVA' 카테고리의 다른 글

자바 기초부터 차근차근...(7)  (0) 2020.04.21
자바 기초부터 차근차근...(6)  (0) 2020.04.21
자바 기초부터 차근차근...(4)  (0) 2020.03.24
자바 기초부터 차근차근(3)  (0) 2020.03.15
자바 기초부터 차근차근(2)  (0) 2020.03.15