[PHP] 비트연산자(&)를 이용한 플래그 값 비교 방법
비트 연산을 이용해 여러 상태 값을 처리하는 방법을 소개합니다.
비트 연산하면 떠오르는 패턴의 수열이 있습니다.
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 .. 와 같은 공비가 2인 등비수열..
이제 이 값들을 식재료에 매칭시켜 예를 들어보겠습니다.
// $food 라는 배열에 식재료를 정의 $food = array( 1, // 파 2, // 마늘 4, // 간장 8, // 고추장 16, // 김치 32, // 햄 64, // 설탕 128, // 후추 256, // 소금 512, // 고춧가루 1024, // 청양고추 2048, // 물엿 4096, // 돼지고기 ); // 파(1) + 김치(16) + 소금(256) + 돼지고기(4096) = 4369 $cook = $food[0] + $food[4] + $food[8] + $food[12]; echo $cook; (결과 : 4369) // $cook 변수에 소금이 포함되어있는지 확인 if($cook & 256 또는 $food[8]) { echo 'true'; }else{ echo 'false'; } (결과 : true) // $cook 변수에 고추장이 포함되어있는지 확인 if($cook & 8 또는 $food[3]) { echo 'true'; }else{ echo 'false'; } (결과 : false)
위 코드에서는 아래와 선택했습니다.
파(1) + 김치(16) + 소금(256) + 돼지고기(4096) = 4369
선택된 수열 값의 합인 4369에서 더해진 수열값을 제외하고는 모두 false가 반환되는 것을 알 수 있습니다.
이 방법은 여러 옵션을 하나의 값으로 저장하고 검증할때 유용하게 사용됩니다.