728x90

 

https://fall-in-dream.tistory.com/86

 

비트 연산자 사용하기 - 1편

비트 연산자를 사용하여 정수형 데이터의 비트 단위 조작을 할 수가 있습니다. 주요 비트 연산자는 종류 설명 AND(&) 두 비트가 모두 1일 때만 결과가 1이 됩니다. OR(|) 두 비트 중 하나라도 1이면

fall-in-dream.tistory.com

 

위의 글을 보신 분들 중

 

의아한?궁금한? 부분이 있으신 분들이 있을거라고 생각합니다.

 

그것은 바로

 

1. NOT 연산의 결과

 

2. >>연산과 >>>의 차이

 

라고 생각합니다.

 


 

 

이번에는 우선 NOT 연산의 결과를 다시 한 번 살펴 봅시다.

 

int a = 5(0101) 를

 

Not 연산 결과로

 

-6(1010)이 나왔습니다.

 

'0101'NOT(~) 연산했으니 0과 1이 반대가 돼서 '1010'이 나온 것까지는 OK

 

근데 '1010'은 12가 아닌가?

 

생각할 수 있습니다.

 

NOT연산자를 이해하기 위해서는

 

JAVA는 2의 보수를 사용하는 것을 알아야 합니다.

 

예로,

 

int 형의 변수는 32비트로 나타내는데

 

즉, int a = 5; 라고 하면

 

우리가 보기에는 '0101'이지만

 

사실은

 

'0000  0000  0000  0000  0000  0000   0000  0101'이라는 사실!!!!

 

그러면 이 것을 NOT(~) 연산한다면?

 

'0000  0000  0000  0000  0000  0000   0000  1010'이 아니라

 

'1111  1111  1111  1111  1111  1111   1111  1010'가 되는 겁니다!!!!

 

이진수 '1111  1111  1111  1111  1111  1111   1111  1010' 는 부호 비트가 1로 시작하므로 음수로 간주됩니다.

 

이진수에서 2의 보수를 취하면 해당 음수의 양수 표현이 됩니다.

 

따라서 '1111 1111 1111 1111 1111 1111 1111 1010'

 

2의 보수는

 

'0000 0000 0000 0000 0000 0000 0000 0110'이 되고, 이는 10진수로 -6입니다.

 

(2의 보수에 대해서는 다음에 한 번 다루어 보도록 하겠습니다.)

 

그러면 다음에는

 

>>연산과 >>>연산의 차이에 대해 들고 오겠습니다!!!

 

 

 

 

다음에 또 봐요

 

 

728x90

 

비트 연산자를 사용하여 정수형 데이터의 비트 단위 조작을 할 수가 있습니다.

 

주요 비트 연산자는

 

종류 설명
AND(&) 두 비트가 모두 1일 때만 결과가 1이 됩니다.
OR(|) 두 비트 중 하나라도 1이면 결과가 1이 됩니다.
XOR(^) 두 비트가 서로 다르면 결과가 1이 됩니다.
NOT(~) 비트를 반전시킵니다. 0은 1로, 1은 0으로 바꿉니다.
시프트 연산자(<<, >>, >>>)
  • << (왼쪽 시프트): 비트를 왼쪽으로 이동시킵니다. 오른쪽에 0으로 채워집니다.
  • >> (오른쪽 시프트): 비트를 오른쪽으로 이동시킵니다. 왼쪽에 부호 비트로 채워집니다.
  • >>> (부호 없는 오른쪽 시프트): 비트를 오른쪽으로 이동시키되, 왼쪽에 0으로 채웁니다.

 

정도가 있습니다.

 

예시

1. AND(&) 연산자 : 두 비트가 모두 1일 때만 결과가 1이 됩니다.

int a = 5;    // 이진수: 0101
int b = 3;    // 이진수: 0011
int result = a & b; // 결과: 0001 (1)

 

 

2. OR(|) 연산자 : 두 비트 중 하나라도 1이면 결과가 1이 됩니다.

int a = 5;    // 이진수: 0101
int b = 3;    // 이진수: 0011
int result = a | b; // 결과: 0111 (7)

 

 

3. XOR(^) 연산자 : 두 비트가 서로 다르면 결과가 1이 됩니다.

int a = 5;    // 이진수: 0101
int b = 3;    // 이진수: 0011
int result = a ^ b; // 결과: 0110 (6)

 

 

4. NOT(~) 연산자 : 비트를 반전시킵니다. 0은 1로, 1은 0으로 바꿉니다.

int a = 5;    // 이진수: 0101
int result = ~a;  // 결과: 1010 (-6)

 

 

5. 시프트 연산자

1) << (왼쪽 시프트) : 비트를 왼쪽으로 이동시킵니다. 오른쪽에 0으로 채워집니다.

2) >> (오른쪽 시프트) : 비트를 오른쪽으로 이동시킵니다. 왼쪽에 부호 비트로 채워집니다.

3) >>> (부호 없는 오른쪽 시프트) : 비트를 오른쪽으로 이동시키되, 왼쪽에 0으로 채웁니다.

int a = 5;    // 이진수: 0101
int resultLeftShift = a << 1;  // 결과: 1010 (10)
int resultRightShift = a >> 1; // 결과: 0010 (2)

 

다음에 또 봐요

 

+ Recent posts