巴扎黑2017-04-17 18:02:22
모두 이진 연산자이며 어셈블리 개념이므로 일반적으로 사용되지 않습니다.
하지만 상대적으로 낮은 레벨의 오퍼레이터이기 때문에 작업 속도가 매우 빠르고, 일반 오퍼레이션에서도 사용할 수 있습니다.
예:
및 연산자는 일반적으로 지우는 데 사용됩니다.
AND 연산자를 사용하여 정수를 짧은 정수로 변환할 수 있습니다(실제로는 dword를 단어로 변환).
Or 연산은 일반적으로 보완 코드에 사용됩니다.
예를 들어 정수형은 4바이트, 32비트이므로 32비트를 수용할 수 있도록 구성할 수 있다는 의미입니다. (TRUE
/FALSE
) 이때 或
를 사용하여 특정 위치를 1로 설정할 수 있습니다.
암호화에는 일반적으로 배타적 OR을 사용합니다.
그 밖에도 곱셈은 왼쪽 쉬프트, 나눗셈은 오른쪽 쉬프트 등 특이한 기능도 있습니다.
이 분야에는 지식 포인트가 너무 많아 일반적으로 특별히 공부할 필요가 없습니다. 바이너리에 대해 더 많이 알면 이해할 수 있을 것입니다. 솔직히 말해서 꽤 어렵습니다.
오랜 시간 동안 썼는데 아마 이해하는 사람이 많지 않았을 것 같아요. .
PHPz2017-04-17 18:02:22
비트 연산은 임베디드 및 드라이버 프로그래밍에서 더 많이 사용됩니다. 레지스터를 직접 연산할 때는 많이 사용되지 않는 것 같습니다.
하지만 사용할 수 있는 이상한 기술이 많이 있다는 인상을 받았습니다. 가장 인상 깊었던 것은 leetcode에 대한 질문입니다:
LeetCode 136. Single Number
질문은 매우 간단합니다. 배열에 한 번 나타나는 유일한 정수를 찾고 나머지는 두 번 나타나는 것입니다.
일반적인 아이디어는 테이블을 사용하는 것이지만 배열이 큰 경우 속도가 매우 느리고 비트 XOR 알고리즘이 있습니다.
배열의 모든 숫자를 비트 단위로 직접 XOR하면 나머지 숫자가 원하는 이유를 알 수 있습니다.
黄舟2017-04-17 18:02:22
실제 시나리오의 예
바이트의 특정 비트 값을 구성합니다.
예:
이 변수의 특정 비트를 설정하려면 비트별 OR a = a|0x01을 사용하여 마지막 비트를 추출하면 비트별 AND b = a&0x01을 사용할 수 있습니다. 마지막 비트를 추출하는 값입니다.