问题标签 [bitset]

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 投票
1 回答
3053 浏览

c++ - 快速位集追加?

我正在寻找一种具有快速位附加功能的位集实现,其中可以一次有效地附加多个位。

例如

到目前为止,我已经尝试过 boost::dynamic_bitset 和 std::vector。两者都很慢。


旧帖子

我正在使用 boost::dynamic_bitset 来打包一些数据。

通常我想一次打包约 5 位,这会导致如下调用:

然而,这在我看来效率很低,不能一次添加所有位吗?

例如

我希望它会做类似的事情:

为什么dynamic_bitset没有这样的功能?是否有可能有效实施?

0 投票
3 回答
1749 浏览

c++ - boost::dynamic_bitset 连接性能

我想以一种不会影响性能的方式将一个大的 bitset 与一个较小的 bitset 连接起来。目前,我的应用程序仅在以下代码中花费了 20% 的 cpu 时间:

我读过这篇文章,它提出了一个解决方案,不幸的是这对我不起作用,因为目标位集和源位集的大小之间的大小差异非常大。

有任何想法吗?

如果使用 boost::dynamic_bitset 无法有效地做到这一点,那么我愿意接受其他建议。

0 投票
4 回答
11920 浏览

c++ - 在 C++ 中定义一个大的位集

在我的程序中,我需要检查我是否已经在一组 2.5*10^9 中生成了一个值。我希望生成大约一半的集合,并且需要有一种快速的方法来检查和更新它。在我看来,bitset 是一个好主意,因为它不需要太多内存(每个值 1 位)并且速度很快。

问题是,当我在课堂上定义我的集合时,我得到了一个segmentation fault,因为尺寸太大(它适用于较小的尺寸)。

任何的想法 ?

谢谢

PS:如果可能的话,我宁愿不使用外部库。我已经在使用GMP,但我认为他们没有针对大量数字设置的实现。

0 投票
2 回答
2277 浏览

c++ - 类中的c ++位集错误

我正在尝试在 C++ 中创建一个 Floodfill 算法,所以我的计划是创建一个 2D 数组,然后每个项目都是一个对象,并带有属性来检查它周围的墙壁。

我按以下方式记下墙壁,1 = 顶部 2 = 右侧 4 = 底部 8 = 左侧

所以 13 表示顶部/底部/左侧墙

但是当我使用时,std::bitset<sizeof(int)> bits(w);我得到一个“预期的';' before '(' token 我该如何解决这个问题?我已经尝试了很多东西,但它就是行不通。

我的代码:

};

}

0 投票
1 回答
850 浏览

c++ - 将 char 数组转换为具有 4 位元素的向量

我想使用以下代码段

得到一个包含 3 个元素的向量看起来像 1101 1010 1010

但我无法获得预期的正确结果。

你可以帮帮我吗?谢谢!

0 投票
4 回答
17454 浏览

java - 从 BitSet 转换为 Byte 数组

我选择了这个将 BitSet 转换为 Byte 数组的示例。

但是在讨论论坛中,我看到通过这种方法我们不会得到所有的位,因为每次计算都会丢失一个位。这是真的?我们需要修改上面的方法吗?

0 投票
2 回答
983 浏览

java - BitSet 和 Byte Array 值从相反方向设置

我有:

以及名为 BitComp 的类中的 getter 和 setter。以下类将所有前 8 位设置为 1(byte[0])。之后,它将所有字节转换为 BitSet。现在,当它将第二位设置为 true 并打印它们时。

输出:00000000000000000000000000000000011111111 <- 0th
0th-> 0100000000000000000000000000000011111111

不应该有任何变化,因为 byte[0] 包含前 8 个元素,我使用 BitSet 操作将第二个元素设置为 1。所以 BitSet 是从 LHS 接近的,而 Byte 数组是从 RHS 存储的。如何解决这个问题?getBitsFromByte 方法有问题吗?请建议。谢谢

0 投票
2 回答
444 浏览

c - C语言中的bitset类型使用什么类型

我必须定义一个 bitset 类型来构建位数组。在这些数组之间可以执行和/或/xor之类的位操作(例如,比较它们)并且是主要操作。我应该使用什么类型作为 bitset 类型?

我认为该类型应该是编译器可以处理的最广泛的 NOT SIMULATED 类型。即,如果编译器模拟 64 位类型(例如,如果机器或操作系统不支持它)屏蔽简单和之间的复合操作,则应使用 32 位类型。如何确定?

还有更多问题:

新的 c99 标头定义了一些类型(精确宽度整数类型),其中:

“它们的形式是 intN_t 和 uintN_t。这两种类型都必须用 N 位表示,没有填充位。intN_t 必须编码为二进制补码有符号整数,uintN_t 必须编码为无符号整数。除非实现支持类型,否则这些类型是可选的宽度为 8、16、32 或 64,则应将它们类型定义为具有相应 N 的相应类型。任何其他 N 都是可选的。

所以我认为检查 64 位类型的实现是第一步,对吧?

我的项目使用 SDL 库,它#defines 一个宏:

因此,也许我可以根据该宏来定义位集类型(但这不是最佳的,因为我想编写代码 sdl 独立)。

说说你对的看法。

0 投票
2 回答
797 浏览

c++ - 从任意位集子序列中提取长

有没有一种方法可以有效地从位集中提取 CPU 字长长的位子序列,而无需单独迭代每个位?就像是

如果它会截断位串而不是抛出异常,就会这样做!

0 投票
3 回答
1097 浏览

c++ - c++ bitset 输出问题

我正在使用bitset,所以我想知道将base-10转换为base-2的最佳方法是什么,因为由于某种原因我得到了错误的答案:给出数字19,我希望看到:10011(16-2-1),为什么输出(00011)