我有一个由随机数生成器生成的字节数组.我想把它放到STL bitset中.
不幸的是,看起来Bitset只支持以下构造函数:
我现在能想到的唯一解决方案是逐位读取字节数组并生成1和0的字符串.有没有人有更有效的解决方案?
我错过了一些痛苦明显的东西吗?或者世界上没有人真正使用java.util.BitSet?
以下测试失败:
@Test
public void testBitSet() throws Exception {
BitSet b = new BitSet();
b.set(0, true);
b.set(1, false);
assertEquals(2, b.length());
}
Run Code Online (Sandbox Code Playgroud)
我真的不清楚为什么我最终没有得到长度为2且值为10的BitSet.我偷看了java.util.BitSet的源代码,并且在随意检查时似乎无法在一点点之间做出充分的区分这已被设置为false并且有点从未设置为任何值...
(请注意,在构造函数中显式设置BitSet的大小无效,例如:
BitSet b = new BitSet(2);
Run Code Online (Sandbox Code Playgroud) 除了通常的"保持计数器"方法之外,任何计算BitSet中设置位数的快速方法?
我有一个问题,我有点困惑,一位同事告诉我,这将是一个寻求帮助的好地方.
我试图在Java中实现C风格的位域.这是一个粗略的例子(此时我没有在我面前的实际代码).
typedef union
{
typedef struct
{
unsigned short a :1;
unsigned short b :1;
unsigned short c :2;
unsigned short d :10;
} bitfield;
unsigned short bitmap;
}example_bitfield;
Run Code Online (Sandbox Code Playgroud)
遗留代码中我有一些类似的样式位域.我需要为Java提供等效方法的原因是我正在研究将使用Java与使用UDP的其他遗留应用程序进行通信的代码.
我没有重写代码的选项.我知道这种方法不可移植,有字节序问题(和填充/对齐等),如果我能够重写代码,可以做得更好.不幸的是,我需要回答这个非常具体的问题.系统已关闭,因此我不需要担心编译器/操作系统等每一种可能的组合.
使用Java EnumSet的方法不起作用,因为我认为只允许每个值为一位.我需要能够打包值,例如占用10位的d值.
我知道Java Bitset但它有局限性.我使用的是旧版本的Java,因此我没有一些较新的Java Bitset方法(即可能肯定有帮助的valueOf方法).
有没有人有任何关于如何使这个尽可能易于管理的想法?我有超过10个位域需要为我的通信实现.
感谢您提供任何帮助!
如何std::bitset<128>在C++中实现增量?
因为bitset是128位长,所以我不能简单地做
std::bitset<128> set = std::bitset<128>();
set = std::bitset<128>(set.to_ulong() + 1ULL);
Run Code Online (Sandbox Code Playgroud) 因为bool,它是8位而只有真和假,为什么它们不能使它成为单位.
而且我知道有bitset,但不是那么方便,我只是想知道为什么?
我有一个,std::bitset但现在我想在它上面使用STL算法.
我可以使用std::vector<bool>,但我喜欢std::bitset构造函数,我想要std::bitset按位操作.
我是否必须经历一个循环并将所有东西都std::vector<bool>填入使用STL算法,然后将其复制回std::bitset,或者有更好的方法吗?
我有以下功能:
int GetGroup(unsigned bitResult, int iStartPos, int iNumOfBites)
{
return (bitResult >> (iStartPos + 1- iNumOfBites)) & ~(~0 << iNumOfBites);
}
Run Code Online (Sandbox Code Playgroud)
该函数返回一个字节的位组.
也就是说,如果bitResult=102 (01100110)2, iStartPos=5, iNumOfBites=3
输出:2 (10)2
对于iStartPos=7, iNumOfBites=4
输出:3 (0110)2
我在寻找更好的方法/"友好"要做到这一点,即用bitset或类似的东西.
有什么建议吗?
给定位串数组(所有相同长度)和查询字符串Q找到top-k与Q最相似的字符串,其中字符串A和B之间的相似性被定义为A和B中的数字1,(操作并按位应用) .
我认为这个问题应该有一个经典的结果.
k很小,数百,而数亿的矢量数和矢量的长度是512或1024
我的猜测是O(n),其中n是no.比特.或者它是不变的?我的意思是它不应该只能从内存中复制这些位吗?
bitset ×10
c++ ×6
java ×3
boolean ×2
algorithm ×1
biginteger ×1
bit-fields ×1
byte ×1
c ×1
c++11 ×1
indexing ×1
std-bitset ×1
tree ×1
vector ×1