问题标签 [bitmask]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4561 浏览

c# - LINQ(to SQL)可以按位查询吗?

我有一个用户表,其中包含用户所属角色的位掩码。我想在位掩码值中选择属于一个或多个角色的用户。例如:

这将选择在其位掩码中具有角色“2”、“4”或“16”的所有用户。这可以在 LINQ 查询中表达吗?谢谢。

0 投票
6 回答
50701 浏览

sql - 比较 SQL 中的两个位掩码以查看是否有任何位匹配

有没有办法比较 Transact-SQL 中的两个位掩码以查看是否有任何位匹配?我有一个用户表,其中包含用户所属的所有角色的位掩码,我想选择在提供的位掩码中具有任何角色的所有用户。所以使用下面的数据,角色位掩码 6(设计师+程序员)应该选择 Dave、Charlie 和 Susan,而不是 Nick。

有任何想法吗?谢谢。

0 投票
7 回答
6662 浏览

sql - 位掩码的大小是否有实际限制?

有一种常见的方法是使用位掩码将多个值存储在一个变量中。例如,如果用户对某项具有读、写和执行权限,则可以通过说将其转换为单个数字read = 4 (2^2), write = 2 (2^1), execute = 1 (2^0),然后将它们相加得到 7。

我在几个 Web 应用程序中使用了这种技术,我通常将变量存储到一个字段中,并根据不同值的数量给它一种 MEDIUMINT 或其他类型。

我感兴趣的是,您可以像这样存储的值的数量是否有实际限制?例如,如果数字超过 64,则不能再使用(64 位)整数。如果是这样的话,你会用什么?它将如何影响您的程序逻辑(即:您仍然可以使用按位比较)吗?

我知道,一旦您开始获得非常大的值集,另一种方法将是最佳解决方案,但我对这种方法的边界感兴趣。

0 投票
4 回答
11987 浏览

sql - 使用 SQL 确定子网掩码的 cidr 值

我想找到一种方法来执行 SQL 查询,该查询将计算存储在数据库中的子网掩码的 cidr(位表示)。例如,我将 255.255.255.0 或其十进制值 (4294967040) 存储在数据库中。我想做一个选择并通过查询取回 /24 表示。

我已经完成了以下操作来确定子网的最后一个 IP,所以我希望做类似的事情来确定掩码的 cidr 表示。

最好这是一个可以在 mysql、postgres、oracle 等下工作的 SQL 语句。

0 投票
16 回答
14893 浏览

c - 我可以在 C 中分配特定数量的位吗?

我正在尝试存储大量在运行时确定的布尔信息。我想知道最好的方法可能是什么。

我目前一直在尝试使用以下方法分配内存:

pStatus = malloc((<number of data points>/8) + 1);

认为这会给我足够的工作。然后我可以使用数组表示法中的指针引用每个布尔值:

pStatus[element]

不幸的是,这似乎效果不佳。首先,我很难将内存初始化为整数值0。这可以使用memset()吗?不过,我认为这不会影响我在尝试访问时崩溃的原因pStatus[element]

我也不完全相信这种方法是最好的方法。我真正想要的本质上是一个反映布尔值状态的巨大位掩码。我错过了什么吗?

0 投票
6 回答
877 浏览

java - 以编程方式计算值类型的大小

我正在为将布尔值打包成一个字节的方法编写单元测试。不同的位位置由枚举的值决定,目前只有 5 个值,但可以想象(尽管极不可能)这个数字可以达到 9。

我想要一个简单的测试:

私有字节 m_myNum;枚举 MyEnum {...}

断言(sizeof(m_myNum) <= MyEnum.values().length);

我的印象是 Java 中没有 sizeof 函数。最优雅的解决方法是什么?

- -编辑

我不认为我很清楚。我不关心正常的运行时间。我的问题是我现在可以使用存储所有信息的字节编写此代码,但是随着 Enum 在代码的不相关部分中增长,我可能会达到我的位掩码代码中断的地步。我不想在已部署的应用程序中使用它,而是希望有一个单元测试在枚举中的状态数超过存储变量中的位数时失败,因此当程序员添加第九个枚举时,他们可以调整变量的类型为多于八位的东西。

0 投票
11 回答
1482 浏览

c - 按位循环遍历大数据块的最快方法是什么

我正在逐字节运行二进制数据的内存块。

目前我正在做这样的事情:

面具在哪里:

(不知何故,我没有设法在循环或内联函数中做到这一点,所以我把它写出来了。)

有人对如何改进第一个循环有任何建议吗?我对深入浅出相当缺乏经验。

这似乎是一件愚蠢的事情。但我正在实施压缩算法。我只想让位访问部分正确。

谢谢!

PS:这是在 Visual Studio 2008 编译器上。因此,如果建议适用于该编译器,那就太好了。

PPS:我刚刚意识到,我不需要增加两个计数。一个就足够了。然后计算最后的总位数的差异。但这将特定于仅计数。我真正想要快速完成的是位提取。

编辑:提出的查找表想法很好。我意识到我在标题中提出了错误的问题。因为最后我想做的不是计算位,而是尽可能快地访问每个位。

另一个编辑:是否可以在数据中仅将指针推进一位?

另一个编辑:感谢您迄今为止的所有回答。

我想在接下来的步骤中实现的是一个不分析上下文的简单二进制算术编码器。所以我现在只对单个位感兴趣。最终它将成为一个上下文自适应的 BAC,但我将把它留到以后。

处理 4 个字节而不是 1 个字节可能是一种选择。但是超过 32 位的循环也很昂贵,不是吗?

0 投票
5 回答
23091 浏览

mysql - 有没有办法直接从 SELECT 查询中将 IP 与 IP+CIDR​​ 匹配?

就像是

SELECT COUNT(*) AS c FROM BANS WHERE typeid=6 AND (SELECT ipaddr,cidr FROM BANS) MATCH AGAINST 'this_ip';

因此,您不必先从数据库中获取所有记录,然后将它们逐个匹配。

如果 c > 0 则匹配。

禁令表:

数据库:MySQL 5

查询时已知 IP 和 IPv 类型(4 或 6)。

IP 例如 ::1 二进制格式

禁止 IP 例如 ::1/64

0 投票
5 回答
3967 浏览

c++ - 位掩码到数组索引

有没有一种简单的方法可以将位掩码转换为数组索引?

IE。如果我有一个枚举

我想将相关数据存储在一个数组中,有没有一种简单的方法可以将a转换为0,b转换为1,c转换为2等?

非常感谢

0 投票
4 回答
12802 浏览

sql - SQL Server:varbinary 或 int 存储位掩码?

就性能或灵活性而言,使用 int vs varbinary 存储位掩码是否有任何优势。

出于我的目的,我将始终对这些位掩码进行读取(不写入或更新)。