[PHP] 비트연산자(&)를 이용한 플래그 값 비교 방법

[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가 반환되는 것을 알 수 있습니다.

이 방법은 여러 옵션을 하나의 값으로 저장하고 검증할때 유용하게 사용됩니다.

%d 블로거가 이것을 좋아합니다: