티스토리 뷰

이번 강좌가 비트 연산자를 끝내는 강좌와 동시에 연산자를 끝내는 강좌일듯 합니다 ㅎ

잘 따라와 주세요 !


비트 연산자란? 비트 단위로 연산하는 연산자 입니다

비트는 뭘까요? "정보량의 최소 기본 단위. 1비트는 이진수 체계(0, 1)의 한 자리로, 8비트는 1바이트이다." 네이버 국어사전 결과 입니다

여기서 비트 연산자를 사용하려면 무조건 피 연산자가 정수여야 합니다

실수를 가지고 비트 연산을 하는게 의미도 없고 실수는 값의 표현 체제가 정수랑 완전 다르기 때문입니다


아무튼 비트 연산자에 대해 살펴보겠습니다


 연산자 기호

연산자 기능 

결합 방향 

 &

비트단위로 &(AND)연산을 합니다 

 →

비트단위로 |(OR)연산을 합니다 

  

비트단위로 ^(XOR)연산을 합니다 

  

피 연산자의 모든 비트를 반전시켜 나온 결과를 정수로 묶어 반환합니다 

  ←


이런 연산자로 비트 연산을 하게 됩니다

어디서 많이 본 연산자 아닌가요? 논리 연산자의 기호와 비슷합니다


비트연산자는 비트 단위로 연산을 하며 연산된 결과를 묶어서 하나의 정수로 계산한다음 결과를 반환하게 됩니다

그럼 하나하나 특징을 살펴보도록 하겠습니다


&연산자는 &&연산자와 비슷합니다

두 피 연산자(정수)의 비트를 비교하여 비트가 모두 1일때만 1을 반환하는 연산자 입니다



위 그림을 보시면 이해가 쉬우실겁니다

이렇게 피 연산자의 비트를 비교해서 모두 1일때만 1을 반환하게 됩니다


|연산자는 ||연산자와 비슷한대요

둘중 하나만 1이 있어도 1을 반환합니다



이렇게 말이죠

하나라도 1이 있으면 1을 반환하게 되지요


^연산자는 두 비트가 다를경우 1을 반환합니다



이렇게 두 비트가 모두 다를때만 1을 반환하는 연산자 입니다


마지막으로 ~연산자는 모든 비트를 반전시킵니다



이렇게 1은 빨간 선처럼 0으로, 0은 노란 선처럼 1로 반전시키는 연산자 입니다




이렇게 해서 비트 연산자에 대한 설명은 마쳤습니다

이제 비트 쉬프트 연산자에 대해 알아보겠습니다

여기서 쉬프트란 키보드의 (Shift)와 같은 단어 입니다 ㅋㅋ


이 연산자도 비트 연산자와 같이 피 연산자가 모두 정수여야 합니다


 연산자 기호

연산자 기능 

 <<

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

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

 >>

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

이동에 따른 빈공간은 양수일경우 0으로, 음수일경우 1으로 체움 

 >>>

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

이동에 따른 빈공간을 모두 0으로 체움


그럼 예제를 통해 살펴보겠습니다


System.out.println(2 << 1); //4출력

System.out.println(2 << 2); //8출력

System.out.println(2 << 3); //16출력


System.out.println(4 >> 1); //2출력

System.out.println(4 >> 2); //1출력


실행 결과를 보게 되면(주석 참조) << 연산자의 실행결과 2의 비트가 1칸씩 왼쪽으로 이동해서 2의 n배가 되는 모습을 볼수 있습니다

또한 >> 연산자의 실행결과로 4의 비트가 1칸씩 오른쪽으로 이동해서 2의 n승으로 나눠지는 모습을 확인할수 있읍니다


그러므로 비트가 왼쪽으로 n칸씩 가게되면 그 정수에 2의 n승을 곱한거라 마찬가지며

비트가 오른쪽으로 n칸씩 가게되면 그 정수에 2의 n승으로 나눈거라 마찬가지란 뜻이 됩니다


그러므로 2배, 3배한 결과를 얻을수 있습니다


여기서 >>>연산자는 부호를 결정하는 MSB를 0으로 지워버릴수 있기 때문에 음수에 >>>연산자를 사용하게 되면 전혀 다른 값이 나올수 있으니 주의하세요




이렇게 비트 연산자에 대한 설명이 끝났습니다

연산자 부분은 소스 예)로 확인하지 않고 설명만 해도 된다고 생각했기 때문에 예제 소스의 양이 적을겁니다

(전혀 귀찮아서가 아닙니다)


다음 강의부터는 if ~ else등 프로그램의 실행 흐름을 제어하는 명령어를 배우게 됩니다

저도 이제 책을 보며 좀더 배워나가야 하고 이해가 점점 어려워 지기 때문에 강의의 흐름을 잡기 위해 노력하겠습니다(?)


그러므로 조금 시간이 걸릴수 있으며 예제를 많이 사용하여 저도 이해하고 여러분도 이해할수 있도록 글쓰겠습니다 ㅎㅎ


그럼 이번 비트 연산자 강좌와 연산자 전체를 마치겠습니다 ㅎㅎ

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
댓글
댓글쓰기 폼