비트 연산자 란 무엇입니까?
컴퓨터 프로그램에서 비트 연산자는 표현식에서 비트 패턴을 조작하는 연산자입니다. 비트 AND, OR, 배타적 OR (XOR), NOT, 오른쪽 시프트 및 왼쪽 시프트가 일반적인 작업입니다. 대부분의 컴퓨터 프로그래밍 언어에는이 6 가지 연산자가 모두 포함됩니다. 이들은 종종 컴퓨터 하드웨어를 제어하는 프로그램에서 개별 비트를 설정, 해제 또는 뒤집기 위해 사용됩니다. 비트 연산자는 데이터 암호화 및 압축 알고리즘에도 자주 사용됩니다.
일반적인 비트 연산자는 일반적으로 C, C ++ 및 Java와 같은 프로그래밍 언어로 상징적으로 표시됩니다. 더하기 또는 빼기 부호와 같은 산술 연산자처럼 식에 사용됩니다. 비트 연산자 AND는 앰퍼샌드 & & , OR | 캐럿 ^ 와 XOR. 보수 연산자라고도하는 NOT은 물결표 ~로 표시됩니다.
오른쪽 시프트 연산자는 오른쪽 >>을 가리키는 이중 캐럿을 사용합니다. 반대로 왼쪽 이동은 왼쪽 이중 캐럿 <<로 표시 됩니다. Java에는 오른쪽 포인팅 트리플 캐럿 >>>으로 표시되는 또 다른 오른쪽 시프트 연산이 포함되어 있습니다.
비트 연산자는 피연산자의 각 비트 쌍에 논리 연산을 적용합니다. NOT, 오른쪽 시프트와 왼쪽 시프트에는 단 하나의 피연산자가 있습니다. 시프트 연산의 두 번째 값은 비트 수입니다. 비트 연산자의 작동 방식을보다 잘 이해하기 위해 피연산자를 이진수로 시각화 할 수 있습니다. 예를 들어, 보수 연산자는 단일 피연산자의 각 비트를 반대 상태로 뒤집습니다. 1은 0이되고 0은 1이됩니다. 8 비트 이진 값 00110101의 보수는 11001010입니다.
AND 연산자에는 두 개의 피연산자가 있습니다. 비트 단위로, 논리 AND 연산은 각 피연산자로부터 해당하는 하나의 비트를 사용하여 수행됩니다. 각 비트 연산의 결과는 전체 결과의 해당 비트 위치에 배치됩니다. 예를 들어, AND 연산자는 한 피연산자의 비트 7을 다른 피연산자의 비트 7로 처리합니다. 결과는 전체 결과의 비트 7에 저장됩니다.
AND 연산에서 결과가 1이 되려면 두 피연산자 비트가 1이어야합니다. 그렇지 않으면 결과는 0입니다. 예를 들어, 피연산자의 8 비트 이진 값이 00110101 및 11110000이면 결과는 00110000이됩니다. AND 연산자의 일반적인 용도는 결과에서 특정 비트를 0으로 만드는 것입니다. 피연산자 중 하나의 비트 위치에 0을 배치하면됩니다.
OR 연산에서 결과가 0이 되려면 두 피연산자 비트가 모두 0이어야합니다. 그렇지 않으면 결과는 1입니다. OR 연산자의 일반적인 사용은 결과의 특정 비트를 1로 설정하는 것입니다. 이것은 피연산자 중 하나의 비트 위치에 배치하여 수행됩니다. XOR 연산의 경우 두 피연산자 비트가 모두 0이거나 두 피연산자 비트가 모두 1이면 결과는 0입니다. 그렇지 않으면 결과는 1입니다.
왼쪽 시프트 및 오른쪽 시프트는 지정된 수의 비트 위치만큼 피연산자의 비트를 왼쪽 또는 오른쪽으로 이동합니다. 논리적 오른쪽 시프트는 시프트의 일부로 0을 가장 왼쪽 비트로 이동시킵니다. 산술 오른쪽 시프트는 시프트 후 동일한 위치로 시프트하기 전에 가장 왼쪽의 비트, 부호 비트를 복사합니다. 원래 비트도 나머지 비트와 함께 오른쪽으로 이동합니다. 왼쪽 시프트 유형 중 하나는 0을 가장 오른쪽 비트로 이동합니다.
피연산자가 오른쪽으로 시프트되면, 시프트 전에 가장 오른쪽에있는 비트가 단순히 버려집니다. 마찬가지로, 왼쪽 시프트 전의 가장 왼쪽 비트는 폐기된다. 피연산자의 다른 쪽 끝을 감싸지 않습니다.
비트 단위 시프트 연산은 언어 및 구현에 따라 다릅니다. 예를 들어, C 및 C ++에서 >> 및 << 는 피연산자가 부호없는 정수인 경우 논리 시프트를 수행합니다. 피연산자가 부호있는 정수이면 대신 산술 시프트가 수행 될 수 있습니다. Java에서는 모든 피연산자가 부호있는 것으로 간주되며 산술 시프트는 항상 >> 및 <<로 수행됩니다. >>> 연산자는 논리적 인 오른쪽 이동에 사용되지만 신중하게 타입 변환을하지 않고 실수로 산술 오른쪽 이동을 수행 할 수 있습니다.
피연산자가 비트 길이가 다르거 나 일부가 부호가 있고 일부가 부호가없는 경우에도 복잡성이 발생할 수 있습니다. 복잡한 식의 중간에있는 비트 연산자와 숫자 상수는 예상대로 평가되지 않을 수 있습니다. 표현식에서 각 수량의 크기와 부호있는 / 서명되지 않은 특성을 지정하도록주의해야합니다. 이것은 프로그램 코드에서 특정 변수 유형에 대한 신중한 유형 변환 또는 임시 할당으로 수행 할 수 있습니다.