首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的BitMask操作

java中的BitMask操作
EN

Stack Overflow用户
提问于 2010-03-01 00:16:02
回答 4查看 17.4K关注 0票数 7

考虑一下我分配了如下值的场景

亚马逊-1 沃尔玛-2 目标-4 Costco 8 BJS-16

在DB中,数据是通过掩蔽这些值来存储的,这些值是根据每个产品的可用性来存储的。例如,

掩模产品描述 亚马逊提供1台膝上型计算机 17 iPhone可在亚马逊和BJ获得 在Costco和BJ's提供24张床垫

就像这些产品一样,所有的产品都被屏蔽并存储在DB中。

如何根据蒙面价值来检索所有零售商。例如,对于床垫,蒙面价值是24。然后,我将如何找到或列出Costco &BJ的程序。任何算法/逻辑都将受到高度赞赏。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-01 00:21:48

代码语言:javascript
复制
int mattress = 24;
int mask = 1;
for(int i = 0; i < num_stores; ++i) {
    if(mask & mattress != 0) {
        System.out.println("Store "+i+" has mattresses!");
    }
    mask = mask << 1;
}

如果床垫值具有与掩码集相同的位,则if语句对这些位对齐,然后是出售床垫的掩码存储区。当商店出售床垫时,床垫值和面罩值只有非零。对于每次迭代,我们将掩码位向左移动一个位置。

注意,掩码值应该是正的,而不是负的,如果需要的话,可以乘以负的。

票数 9
EN

Stack Overflow用户

发布于 2010-03-01 00:44:58

假设您是指在SQL数据库中,那么在检索SQL中,通常可以添加WHERE (MyField和16) = 16,其中(MyField和24) = 24等等。

但是,请注意,如果您试图优化这样的检索,并且通常与查询匹配的行数要比总行数小得多,那么这可能不是表示这些数据的非常好的方法。在这种情况下,最好有一个单独的"ProductStore“表,其中包含(ProductID,StoreID)对表示该信息(并在StoreID上进行索引)。

票数 1
EN

Stack Overflow用户

发布于 2010-03-01 01:13:25

在每一种情况下,是否最多有两家零售商的库存总和为“蒙面”价值?如果是这样的话,您仍然需要检查所有对来检索它们,这将花费n平方米的时间。只需使用嵌套循环即可。

如果该值表示任意数量零售商库存的总和,那么您正试图解决子集和问题,因此不幸的是,您不能在2^n以上的时间内完成它。

如果你能够增加你的原始数据结构与信息,以查找零售商贡献的总和,那么这将是理想的。但是,既然你问的问题,我假设你没有访问数据结构,而它正在建设,所以,为了生成所有的零售商子集检查,你会想要查看Knuth算法 pdf生成所有的k-组合(并运行1.k)给出在TAOCP第4a节7.2.1.3。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2353254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档