这是一个数学问题,但我敢肯定,这必须拿出一些编程场景,至少我希望如此,我想知道是否有这种类型的情况名称:

假设我有在一系列7项。对于这个例子的目的,让我们用一周的日子。我想用户提交他们计划来在接下来的一周一周中的几天。它们都带有标准系列的复选框,一个用于一周的每一天。

我想用来存储他们选择哪些天在一个数据库字段作为一个单一的整数。

显然,我可以分配每一天的数,1 - 7(留下0出来的情况下,在用户离开所有选择未选中)。但后来我遇到的问题,如果一个用户选择周一和周二(1 + 2),另一选周三(3)。

我还可以给周一些奇异独特使得它是不可能的数字的任何组合是相同的任何其他组合的每一天。

我希望而不是弥补第二场景这样的系列,一些数值属性已经存在(也许系列中的每个号码等的平方),其是已经公使用和推崇。理想情况下,这将是这么熟悉的编程操作,导出单个数字将采取一个共同的编程语言的开销非常小(在我的情况下,PHP)。

难道我只是梦想这件事,还是这样的事情存在吗?

有帮助吗?

解决方案

使用一个位掩码 - 权力2

Monday = 2 ^ 0 = 1
Tuesday = 2 ^ 1 = 2

等。然后星期一和星期二变为:

Monday | Tuesday = 3 (or 00000011 in binary)

其他提示

您可以使用

Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
Saturday = 32
Sunday = 64

在组合将是唯一的。

然后星期一和星期二= 3,星期三= 4。

这给出了爱迪的一个很好的解释在C#

枚举标志属性

早在当记忆是珍贵的,程序员经常去了很多麻烦来编码设置,参数,游戏界面等为位集。有些语言甚至有位台内置了。

我记得有一次阅读所用它们来存储板布局解决八个皇后问题位设置的教程。

大多数C程序员不得不位操作的宏自己的小图书馆只是这类问题。请参见位设置了解例子。它们仍然在代码,不会直接的硬件操作使用了很多。 - 在数字I / O接通和断开位例如

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top