여러분도 아시다시피 AND, OR, NOT, XOR은 조건문에서 자주 쓰게되는 구문들입니다. (NOT은 쓸일이 없지만요.) 하지만 이 구문들이 조건문이 아닌 다른 방식으로도 이용이 된다는 것을 알고 계셨나요? 저도 최근에 알게 된 사실인데, 위 구문들은 BIT단위의 연산에도 사용이 가능한 구문들입니다. 설명에는 byte, integer, unsigned integer,long word, 64-bit long word 형식에 쓰인다고 하네요. 당연하게도 다 정수형 표현이 되는 형식들입니다. 간단하게 보자면,
1 2 3 4 5 6 7 8 9 10 |
IDL> print,5 and 7 5 IDL> print,1 or 2 3 IDL> print, not 3 -4 IDL> print, byte(not 3) 252 IDL> print, 7 xor 3 4 |
첫번째는 5와 7의 bit단위의 AND연산입니다. 5는 0101이고 7은 0111이기 때문에 둘의 AND연산은 0101이 되어서 5가 되는 것이지요.(원래는 int 형식이기 때문에 bit수는 훨씬 큽니다.) 두번째도 같은 형식으로 0010과 0001의 OR연산으로 0011이 된 것입니다. NOT연산의 경우 기본적으로 정수형으로 표현되는 특징 때문에, 2의 보수로 표현이 되어 -4가 나오게 됩니다. 음수가 없는 byte형으로 주었더니 252가 나오네요. XOR연산은 0111 과 0011이 0100으로 출력되는 것을 알 수 있습니다.
좀 길었지만 AND, OR, NOT, XOR 모두가 정상적으로 bit연산을 하고 있는 것을 알 수 있습니다. 추가적으로 비트의 이동은 다음과 같이 할 수 있습니다.
1 2 |
IDL> print,ishft(3,1) 6 |
ishft 함수는 첫번째 인자를 두번째 인자만큼 Bit Shift해줍니다. 양수면 왼쪽으로 이동하고 음수면 오른쪽으로 이동하네요. 대신에 이동한 비트는 그대로 사라집니다. 이정도만 주의하시면 되겠네요.
그런데 비트연산 자주 하시나요???