【问题标题】:Bitwise operations in PHP?PHP中的按位运算?
【发布时间】:2011-01-09 01:26:14
【问题描述】:

我知道,对于许多低级编程来说,按位运算是必要的,例如编写设备驱动程序、低级图形、通信协议数据包组装和解码。我做PHP已经好几年了,在PHP项目中很少看到按位运算。

你能给我一些用法的例子吗?

【问题讨论】:

标签: php bit-manipulation


【解决方案1】:

按位运算在凭据信息中非常有用。例如:

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

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

等等……

这样,我们可以在一个数据库列中保留一个简单的整数,以便拥有系统中的所有凭据。

【讨论】:

    【解决方案2】:

    您可以将它用于位掩码以对事物组合进行编码。基本上,它通过赋予每个位一个含义来工作,所以如果你有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    |
    

    进一步阅读

    【讨论】:

    • 如果您要处理假设的大/可变数量的偏好,这个规模有多好?
    • 您是指速度方面还是可能偏好的数量? 32 位操作系统上的最大数量是单个位掩码的 31 个首选项。不过,您可以通过数组组合多个位掩码。查看php.net/manual/en/language.operators.bitwise.php上的cmets
    • 是的,与数组相比,31 个首选项的限制是不可扩展的,不是吗?我想您可以组合位掩码,但与数组相比,此代码是否易于调试?会快很多吗?
    • 好吧,在它周围加上一个不错的 API,它可能很容易调试。我可以想象位掩码比数组快,但我从未对它们进行基准测试。我很少使用位掩码。您只是要求提供按位运算的示例,位掩码就是其中之一:)
    • @Elzo 您绝对正确,调试/维护更难,实际上比使用设置为 true 或 false 的不同值要慢。通过 API 公开并在数据库中存储这些值时,使用显式命名的布尔值几乎总是更好。它真的只在少数情况下是好的。例如,如果您有一个特定的已知要求,即您需要在存储空间方面非常高效(例如嵌入式系统),或者(较新的范例)您希望将许多选项编码为 URL 中的参数,而保持简短。
    猜你喜欢
    • 1970-01-01
    • 2011-07-29
    • 2021-12-20
    • 1970-01-01
    • 2012-11-09
    • 2011-02-26
    • 2021-10-14
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多