연산자 > 비트 연산

김지원·2022년 5월 22일
0

Java

목록 보기
6/38

연산자

: 기능이 있는 특수문자

연산자 우선 순위

  • 최우선 연산자
  • 단항 연산자
  • 산술 연산자
  • 쉬프트 연산자
  • 논리 연산자
  • 논리 연산자
  • 삼항 연산자
  • 대입 연산자

먼저 대입연산자 속 비트연산에 대해 알아보자.

비트연산

비트연산을 사용하는 이유 :
10 - 9 보다 10^11( = 10 XOR 11)이 데이터 처리가 훨씬 빠르다.

64bit는 수가 큼으로 4bit 연산으로 접근해보자.

AND ( & ) : 두개 1일 때 1
OR ( | ) : 둘 중 하나라도 1일 때 1
XOR ( ^ ) : 두 개의 bit숫자가 다를 때 1
NOT ( ~ ) : ~a = -a-1 ( ↓ 밑에 증명을 통해 설명. )
LEFT SHIFT (A<<a) : A를 a만큼 좌로 비트 이동
RIGHT SHIFR (A>>a) : 를 a만큼 우로 비트 이동

  • 비트가 넘어가면 버려지고, 빈 자리는 0으로 채워진다.

비트 not 연산자

10(1010)
11(1011) 
		 -> &       : 1010
         -> |       : 1011
         -> ^       : 0001
         -> ~ (NOT) : ?

~10 = -11 이 된다?!

< prove 1 >
증명하기 위해서 부호 비트를 알아야 한다.
부호 비트 -> 0 : 양수 / 1 : 음수
not을 만나면 양 -> 음으로 바꿔지게 된다.

1 : 0001
-1 : 1111 

<수학적 증명>
1 + (-1) = ?
0001 + ( x ) = 0000
( x ) = 1111

그런데 15의 2진법은 1111이다.
즉 같은 bit라도 부호 비트에 따라서 값이 바뀌게 된다.

-1은 0000의 not이다. ~0 = -1
=> ~a = -a-1 이라는 결론이 나오게 된다.
따라서 ~10 = -11 이다.

< prove 2 >

11 + (-11) = ?
1011 + ( x )  = 0000
( x )= 0101 
그러면 0101 은 11이므로 ~10 = -11 임이 증명이 된다. 

SHIFT
: 비트를 이동시키겠다.

< example >

11 << 1
 : 11이라는 값을 왼쪽으로 한번 1비트 이동시켜라.
101 - > 0110 : 6
  • 우리는 64bit을 사용함으로 10110 이 되서 최종적으로 22가 된다.

참고)
좌시프트를 이동시킬때 값이 커질까 작아질까?
answer => 값이 커질수도 있다.
64bit -> 65bit로 넘어가면 값이 작아질수도 있기 때문임.

0개의 댓글

관련 채용 정보