2010-01-25 3 views
27

필자는 장치 드라이버, 저수준 그래픽, 통신 프로토콜 패킷 어셈블리 및 디코딩 작성과 같은 많은 저수준 프로그래밍에 비트 연산이 필요하다는 것을 알고 있습니다. 나는 PHP를 몇 년 동안 해왔고 PHP 프로젝트에서는 비트 연산을 거의 보지 못했습니다.PHP에서의 비트 연산?

사용 사례를 알려주시겠습니까?

+0

거의 최적화 트릭의 외부뿐만 아니라 구성과 같은 비트 연산을 사용 http://php.net/manual/en/function.error-reporting.php 자세한 내용 을 위해 아래 링크 –

+0

확인 http://www.phpchef.com/posts/php-bitwise-operators – Abutouq

답변

46

사물의 조합을 인코딩하기 위해 비트 마스크로 사용할 수 있습니다. 기본적으로 각 비트에 의미를 부여하여 작동합니다. 따라서 00000000 인 경우 각 비트는 하나의 10 진수 일뿐만 아니라 무언가를 나타냅니다. 내가 저장하고 싶은 사용자에 대한 선호도가 있다고 가정 해 봅시다. 데이터베이스는 저장 용량면에서 매우 제한적입니다. 10 진수를 저장하고 이것으로부터 파생시킬 수 있습니다. 어떤 기본 설정이 선택되어 있습니까? 92^3 + 2^000001001이며, 그래서 사용자는 우선도 1 및 선호도 제

00000000 Meaning  Bin Dec | Examples 
│││││││└ Preference 1 2^0 1 | Pref 1+2 is Dec 3 is 00000011 
││││││└─ Preference 2 2^1 2 | Pref 1+8 is Dec 129 is 10000001 
│││││└── Preference 3 2^2 4 | Pref 3,4+6 is Dec 44 is 00101100 
││││└─── Preference 4 2^3 8 | all Prefs is Dec 255 is 11111111 
│││└──── Preference 5 2^4 16 | 
││└───── Preference 6 2^5 32 | etc ... 
│└────── Preference 7 2^6 64 | 
└─────── Preference 8 2^7 128 | 

추가 읽기

PHP에서
+1

가상의 큰 변수/가변 개수의 환경 설정을 다루려면이 스케일이 얼마나 좋을까요? –

+0

속도면이나 가능한 기본 설정의 수를 의미합니까? 32 비트 OS의 최대 수는 단일 비트 마스크의 경우 31 개가됩니다. 배열을 통해 여러 개의 비트 마스크를 결합 할 수 있습니다. http://php.net/manual/en/language.operators.bitwise.php에 대한 의견보기 – Gordon

+0

예, 배열의 31 개 기본 설정은 배열과 비교하여 확장 할 수 없습니다. 그렇습니까? 나는 당신이 비트 마스크를 결합 할 수 있다고 생각하지만이 코드는 배열과 비교하여 디버그하기 쉬울 것인가? 훨씬 더 빨라질까요? –

17

비트 연산은 자격 증명 정보에 매우 유용합니다. 예를 들어 :

function is_moderator($credentials) 
{ return $credentials & 4; } 

function is_admin($credentials) 
{ return $credentials & 8; } 

등등 ...

이 방법, 우리는 시스템의 모든 자격 증명이 하나 개의 데이터베이스 컬럼에 간단한 정수를 유지할 수 있습니다.