본문 바로가기
Develop/Java

6 자바 Java 의 비트연산자!

by 구운밤이다 2016. 7. 10.
728x90
반응형

2016/07/10 - [컴퓨터/Java] - 5 자바 Java의 연산자

안녕하세요~ 오늘은 지난시간에 연산자를 배웠던 것에 이어 비트 연산자를 배워보도록 하겠습니다 컴퓨터는 2진수를 기반으로 데이터를 저장하고 연산을 진행합니다 2진수는 0과 1로 표현되는 수로 만약 int num = 93 을 저장했으면 컴퓨터에는 이런 식으로 저장이 되죠.

0

0

0

1

0

1

1

1

0

1

512

256

128

64 

32 

16 

4

2


그리고 저 한 숫자는 데이터를 표현하는 단위로 비트라고 불린답니다.

10010111101<- 이 2진수 한 단위가 비트이고

10010111101<-비트가 8개 모인 것이 바이트입니다.


~ 연산자


~ 연산자는 비트를 0이면 1로 1이면 0으로 반전시킵니다.


int num1 = 9;

int num2 = ~num1;

에서 num2 의 값을 계산해봅시다


    num1  =  00000000 00000000 00000000 00001001

  num2  =  11111111 11111111 11111111 11110110


& 연산자


&연산자는 두 비트 모두 1일때 1을 반환하는 연산자입니다


int num1 = 9;

int num2 = 15;

int num3 = num1 & num2;

에서 num3의 값을 계산해보면


    num1  =  0000 1001

&  num2  =  0000 1111

>   num3 =  0000 1001

따라서 num3 의 값은 9가 되겠죠?

연산자


| 연산자는 두 비트 중 하나라도 1이면 1을 반환하는 연산자입니다


int num1 = 9;

int num2 = 15;

int num3 = num1 | num2;

에서 num3의 값을 계산해봅시다


      num1  =  0000 1001

|     num2  =  0000 1111

>     num3  = 0000 1111

이렇게 15가 나오져


^ 연산자


^ 연산자는 두 비트가 다를때 1을 반환하는 연산자입니다


int num1 = 9;

int num2 = 15;

int num3 = num1  ^ num2;

에서 num3의 값을 계산해보면


      num1  =  0000 1001

^    num2  =  0000 1111

>     num3  =   0000 0110

이렇게 6이 나옵니다


<< 연산자


<< 와 >> 연산자는 shift 연산자라고도 불리는데요 자바에서는 >>>도 사용합니다! << 연산자는 비트를 왼쪽으로 움직이게 해주는 연산자입니다


int num1 = 9;

num1 = num1 << 2;


   num1 = 0000 1001

>  num1 =  0010 0100

따라서 num1의 값은 9에 2의 2승을 곱한, 즉 9에 4를 곱한 36으로 바뀌게 됩니다 

>> 연산자


>> 연산자는 비트를 오른쪽으로 사라지게 해주는 연산자입니다


int num1 = 9;

num1 = num1 >> 2;


   num1 = 0000 1001

>  num1 =  0000 0010
여기서 num1 은 9를 4로 나눈 몫인 2로 바뀝니다 나머지는 버리는 것과 마찬가지이니..


>>> 연산자

이 연산자는 비트를 오른쪽으로 이동시켜주는 연산자입니다 하지만 이 연산자는 위의 >>연산자와 달리 이동으로 빈 공간을 모두 0으로 채우기 때문에 음수의 경우에는 저 위의 >>연산자를 써야 해요!


int num1 = 9;

num1 = num1 >>> 2;


   num1 = 0000 1001

>  num1 =  0000 0010
양수일 때에는 값이 같게 나오지만 음수를 해보면


int num1 = -9;

num1 = num1 >>> 2;


1073741821

이렇게 이상한값이 나옵니다! 바로 빈 자리를 0으로 채우기 때문!

int num1 = 9;

num1 = num1 >>> 2;


-3

따라서 음수일 때는 이렇게 사용해 주시면 되요


모르는 것은 댓글이나 쪽지로 남겨주시면 성심 성의껏 답변해드리겠습니다!! 댓글공감구독(이웃추가)는 블로거에게 큰 힘이 됩니다! 부탁드리면서 이번 포스팅을 마치도록 하겠습니다! 지금까지 딘또였습니다.


728x90
반응형

'Develop > Java' 카테고리의 다른 글

8 자바 Java 의 반복문  (0) 2016.08.27
7 자바 Java 의 조건문!  (0) 2016.07.10
5 자바 Java의 연산자  (0) 2016.07.10
4 자바 Java 의 형 변환  (0) 2016.07.08
3 자바 Java 자료형과 변수!  (0) 2016.07.07

댓글