2

这是一个数学问题,但我确信这必须在某些编程场景中出现,至少我希望如此,我想知道这种情况是否有名称:

假设我在一个系列中有 7 个项目。为了这个例子,让我们使用星期几。我希望用户提交他们计划在下周到达的一周中的哪几天。它们带有一系列标准的复选框,一周中的每一天都有一个。

我想将他们在一个数据库字段中选择的日期存储为单个整数。

显然,我可以为每一天分配一个数字,1 - 7(如果用户未选中所有选项,则省略 0)。但是,如果一个用户选择星期一和星期二(1 + 2)而另一个用户选择星期三(3),我就会遇到问题。

我还可以给一周中的每一天一些奇异的独特之处,这样任何数字组合都不可能与任何其他组合相同。

我的希望是,与其为第二种情况组成这样的系列,不如已经存在一些已经被很好地使用和尊重的数字属性(可能是系列中每个数字的平方等)。理想情况下,这对编程来说是非常熟悉的,派生单个数字只需要很少的通用编程语言(在我的例子中是 PHP)的开销。

我只是在做梦,还是有这样的事情存在?

4

3 回答 3

6

使用位掩码 - 2 的幂。

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

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

Monday | Tuesday = 3 (or 00000011 in binary)
于 2009-12-15T08:43:26.730 回答
5

你可以使用

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

这些组合将是独一无二的。

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

这很好地解释了 C# 中的思想

枚举标志属性

于 2009-12-15T08:43:00.630 回答
0

在内存很宝贵的时代,程序员经常费力地将设置、参数、游戏布局等编码为位集。有些语言甚至内置了位集。

我记得曾经读过一个关于位集的教程,该教程使用它们来存储板布局以解决八皇后问题。

大多数 C 程序员都有自己的小位操作宏库来解决这类问题。例如,请参见位集。它们仍然大量用于直接进行硬件操作的代码中——例如,在数字 I/O 中打开和关闭位。

于 2009-12-15T20:05:51.107 回答