연산자
: 기능이 있는 특수문자
- 최우선 연산자
- 단항 연산자
- 산술 연산자
- 쉬프트 연산자
- 논리 연산자
- 논리 연산자
- 삼항 연산자
- 대입 연산자
먼저 대입연산자 속 비트연산에 대해 알아보자.
비트연산을 사용하는 이유 :
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
참고)
좌시프트를 이동시킬때 값이 커질까 작아질까?
answer => 값이 커질수도 있다.
64bit -> 65bit로 넘어가면 값이 작아질수도 있기 때문임.