[java] 데이터 타입의 비트 단위 조작 방법
Java는 데이터의 비트 단위 조작을 제공하는 다양한 기능을 제공합니다. 비트 연산은 데이터를 효과적으로 다룰 수 있게 해주며, 특히 네트워크 통신, 암호화, 그래픽 등 다양한 분야에서 유용하게 사용됩니다.
1. 비트 연산자
&
(AND): 두 비트가 모두 1이면 1을 반환, 그렇지 않으면 0을 반환합니다.|
(OR): 두 비트 중 하나라도 1이면 1을 반환, 그렇지 않으면 0을 반환합니다.^
(XOR): 두 비트가 서로 다르면 1을 반환, 같으면 0을 반환합니다.~
(NOT): 비트를 반전하여 반환합니다.
int a = 5; // 0101
int b = 3; // 0011
int resultAnd = a & b; // 0001 => 1
int resultOr = a | b; // 0111 => 7
int resultXor = a ^ b; // 0110 => 6
int resultNotA = ~a; // 1010 => -6
int resultNotB = ~b; // 1100 => -4
2. 시프트 연산자
<<
(왼쪽 시프트): 비트를 왼쪽으로 이동시킵니다. 이동한 비트는 왼쪽에 0으로 채워집니다.>>
(오른쪽 시프트): 비트를 오른쪽으로 이동시킵니다. 이동한 비트는 부호비트 만큼 채워집니다. (부호비트는 양수면 0, 음수면 1)>>>
(부호 없는 오른쪽 시프트): 비트를 오른쪽으로 이동시킵니다. 이동한 비트는 항상 0으로 채워집니다.
int a = 5; // 0000 0101
int b = -5; // 1111 1011
int resultLeftShiftA = a << 2; // 0001 0100 => 20
int resultRightShiftA = a >> 2; // 0000 0001 => 1
int resultRightShiftB = b >> 2; // 1111 1110 => -2
int resultUnsignedRightShiftB = b >>> 2; // 0011 1110 => 30
3. 비트 마스킹
비트 마스킹은 비트 연산과 조합하여 비트 특정 영역의 값을 가져오거나 변경하는 방법입니다.
int number = 141; // 1000 1101
int mask = 240; // 1111 0000
int result = number & mask; // 1000 0000 => 128
4. 비트 패턴의 변경
비트 연산을 이용하면 데이터의 비트 패턴을 효과적으로 변경할 수 있습니다.
int number = 5; // 0000 0101
int setBit4 = number | (1 << 4); // 0001 0101 => 21
int clearBit2 = number & ~(1 << 2); // 0000 0001 => 1
int toggleBit3 = number ^ (1 << 3); // 0000 1101 => 13
5. 비트 단위 조작의 활용
비트 단위 조작은 다양한 분야에서 유용하게 사용될 수 있습니다. 예를 들어, 네트워크 통신에서는 IP 주소의 서브넷 마스크를 비트 연산을 통해 추출할 수 있습니다. 또한, 암호화에서는 비트 연산을 사용하여 암호 키를 생성하거나 암호화 알고리즘에 적용할 수 있습니다.