본문 바로가기

Java/Java

(JAVA) 비트연산(1)

정수의 bit 화

자바에서의 Integer는 4 Bytes이다.

 

1byte  = 8 bits 이기 때문에 총 32개의 공간에 정수가 저장되게 된다.

Integer = 4 bytes (1byte = 8 bits)

            = 32 bits

 

 

ex) int i = 8;

00000000 00000000 00000000 00001000 

(나머지 공간은 0으로 저장되게 된다.)

 

32개의 공간에 표현할 수 있는 숫자의 개수는 몇 가지 인가?

 

4 bytes = 32 bits = 2^32

위와 같이 표현할 수 있는 숫자의 가짓수는 2^32개를 표현할 수 있는 것이 맞다.

 

표현할 수 있는 숫자의 최대 크기는 몇인가?

숫자는 0부터 시작한다는 것을 감안하자

2^32 -1 이 된다.

더보기

난 이쪽이 잘 이해가 가지 않았다

1+2^1 + 2^2+ 2^3+...+2^31

=

2^32-1

이것이 어떻게 성립하는가?

정수로 표현할 수 있는 가장 큰 가짓수는

11111111 11111111 11111111 11111111

바로 다음은 아래의 것이다.

1 00000000 00000000 00000000 00000000

바로 다음이니깐 이것에서 -1만 하면 정수로 표현할 수 있는 최대 값이 되는 것이다.


양수 음수의 구별

31번째 공간이 0 이면 양수

31번째 공간이 1 이면 음수

 

양수일 때는 31번째 공간이 0이므로 표현할 수 있는 최대 수가 2^31-1로 줄었다.

 

 

그러므로 사용할 수 있는 공간은

-2^31부터 2^31 -1 까지이다.

 

양수의 표현

- 양수는 simple하다 31번째 자리에 0만 넣어주고 나머지는 숫자에 맞게 세팅

 

음수의 표현

- 음수는 조금 다르다 31번째 자리에 0을 넣어주고 나머지는 숫자에 맞게 세팅하는것이 아니라

  • 가장 31번째 방을 제외한 나머지 공간에 가장 큰 값 즉 모두 1인 경우에 -1이 된다.

(음수는 정수의 수가 가장 작은 것이 가장 큰수인점을 고려)

11111111 11111111 11111111 11111111->  -1

 

 

 


2진수 연산

 

더하기

 

빼기

 

OR : 두개중 하나라도 1이면 결과는 1

 

 & : 둘다 1일 경우에만 결과가 1

 

~ : 0과 1 반대

 

xor : 두개가 서로 다른 값을 가지고 있을 떄 1로 세팅

 

 

 

0으로 xor 연산을 한 경우에는 자기 자신이 나온다.

1을 xor 연산을 한 경우에는 ~(자기자신) 의 결과가 나온다.

자기자신을 xor연산을 한 경우에는 0 이 나온다.

 

 

shift 연산 : 화살표의 방향에 따라 왼쪽 혹은 오른쪽으로 시프트한다.

 

 


shift 연산의 두가지 방법

  • sign bit를 염두하는 방법
  • sign bit를 염두하지 않는 방법

 

Logical Right Shift

>>> 그냥 무조건 우측으로 시프트 (31번째 방 포함)

 

Arithmetic Right Shift 

>> 옆으로 shift 한것은 이전과 동일하지만 31번째 방의 수는 유지한다. (부호만큼은 포기 못하겠다는 의미)


References

 

 

 

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

(JAVA) equals에 대해서(4)  (0) 2020.02.09
(JAVA) 비트연산(2)  (0) 2020.02.08
(JAVA) equals에 대해서(3)  (0) 2020.02.07
(JAVA) Exceptions in Java (2) - checked, unchecked  (0) 2020.02.04
(JAVA) Exceptions in Java (1)  (0) 2020.02.03