2010-01-25 66 views
27

我明白,按位操作对于许多低级编程(例如编写设备驱动程序,低级图形,通信协议数据包装配和解码)是必需的。我已经做了好几年PHP,并且在PHP项目中很少看到按位操作。在PHP中按位运算?

你能举个例子吗?

+0

在PHP中很少采用优化技巧之外,以及配置,如位操作http://php.net/manual/en/function.error-reporting.php – 2010-01-25 11:06:00

+0

检查下面的链接了解详情 http://www.phpchef.com/posts/php-bitwise-operators – Abutouq 2017-12-06 13:25:23

回答

46

您可以将它用于位掩码来对事物的组合进行编码。基本上,它通过赋予每个位的意义,所以如果你有00000000,每一位代表一些东西,除了是一个单一的十进制数。假设我对要存储的用户有一些偏好,但我的数据库在存储方面非常有限。我可以简单地存储十进制数,并从中推导出哪些首选项被选择,例如, 92^3 + 2^000001001,因此用户偏好1和偏好4.

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 | 

进一步阅读

+1

如果您要处理假设的大/可变数量的偏好,这个规模如何? – 2010-01-25 12:08:38

+0

您的意思是速度或可能的偏好数量?一个32位操作系统上的最大数量是31个偏好的单个位掩码。尽管你可以通过数组组合多个位掩码。请参阅http://php.net/manual/en/language.operators.bitwise.php – Gordon 2010-01-25 12:34:40

+0

上的评论是的,与数组相比,31个首选项的限制是不可扩展的,不是吗?我想你可以结合位掩码,但与数组相比,这些代码是否易于调试?它会更快吗? – 2010-01-25 12:40:53

17

按位操作对凭证信息非常有用。例如:

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

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

等等...

通过这种方式,我们可以保持一个简单的整数在一个数据库中列有系统中的所有凭证。