java - java中的BitMask操作

标签 java bitmask

考虑场景 我有像这样分配的值

Amazon -1

Walmart -2

Target -4

Costco -8

Bjs -16

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

Mask product description

1 laptop Available in Amazon

17 iPhone Available in Amazon and BJ

24 Mattress Available in Costco and BJ's

像这些一样,所有产品都被屏蔽并存储在数据库中。

如何根据屏蔽值检索所有零售商。, 例如,对于床垫,掩码值为 24。那么我将如何以编程方式查找或列出 Costco & BJ's。任何算法/逻辑将不胜感激。

最佳答案

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 语句排列位,如果床垫值与掩码集有相同的位,则掩码为的商店出售床垫。只有当商店出售床垫时,床垫值和掩码值的 AND 才会为非零。对于每次迭代,我们将掩码位向左移动一个位置。

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

关于java - java中的BitMask操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2353254/

相关文章:

c++ - C++ 中有趣的位掩码拼图

java - 使用 JavaFX 从图像 ArrayList 进行幻灯片放映

java - 如果语句没有调用正确的字符串或 boolean 值

C++ 流位掩码为 boolean 值?

python - NumPy boolean 数组警告?

android - 在 Android 开发中使用位掩码自动匹配玩家

java:获取Guava Multimap给定键范围内的值的计数

java - Android 单元测试不会使用正确的应用程序类

Java StackOverFlowError - 错误的递归调用?

c++ - 左移带有可变误差