标签: bitset

在bitset中,我可以对特定的位范围使用"to_ulong"吗?

嗨我正在处理要求我访问特定/范围位的东西.我决定使用bitset,因为它很容易访问特定的位,但我能提取整个范围的位吗?

c++ bitset std-bitset

13
推荐指数
1
解决办法
2006
查看次数

为什么Java`BitSet`没有`shiftLeft`和`shiftRight`函数?

是否有任何特殊原因导致这些缺失?

它们确实存在BigInteger,但由于它们的不可变设计模式BigInteger通常非常慢.BitSet是好得多,因为它是可变的,但我真的很怀念shift功能(<<>>>longS).因为BitSet,就地移位也是有用的,以及循环旋转.

我已经看到了对Shifting a Java BitSet的回复(get(off, len)用于移位;但这需要复制).

别误会我的意思.我知道在哪里报告错误.我只是想知道是否有一个特别的理由要省略它们,例如一些设计模式或这样的概念.特别是因为它们包括在内BigInteger.

java bit-shift bitset

13
推荐指数
1
解决办法
2879
查看次数

我应该使用哪种bitset实现来获得最佳性能?

我目前正在尝试在即时(JIT)编译器中实现各种算法.许多算法在位图上运行,通常称为位集.

在C++中,有多种方法可以实现bitset.作为一名真正的C++开发人员,我更喜欢使用STL中的东西.最重要的方面是表现.我不一定需要动态可调整大小的bitset.

我认为,有三种可能的选择.

I.一种选择是使用std::vector<bool>,它已针对空间进行了优化.这也表明数据不必在内存中连续.我想这可能会降低性能.另一方面,为每个bool值设置一位可以提高速度,因为它非常缓存友好.

II.另一种选择是使用a std::vector<char>.它保证数据在内存中是连续的,并且更容易访问单个元素.但是,使用此选项感觉很奇怪,因为它不是一个bitset.

III.第三种选择是使用实际的std::bitset.事实上它不能动态调整大小并不重要.

我应该选择哪一个以获得最佳性能?

c++ compiler-construction performance bitset

13
推荐指数
2
解决办法
6587
查看次数

在c ++中将bitset转换为int

在c ++中.我将bitset初始化为-3,如:

std::bitset<32> mybit(-3);
Run Code Online (Sandbox Code Playgroud)

是否存在转换mybit为的优雅方式-3.因为bitset对象只有像to_ulong和的方法to_string.

c++ bitset

13
推荐指数
1
解决办法
3万
查看次数

为什么java中BitSet的内部数据存储为long []而不是Java中的int []?

在java中,BitSet的内部数据存储为long []而不是int [],我想知道为什么?这是jdk中的代码:

 /**
 * The internal field corresponding to the serialField "bits".
 */
 private long[] words;
Run Code Online (Sandbox Code Playgroud)

如果这完全取决于性能,我想知道为什么long []存储会获得更好的性能.

java performance bitset

13
推荐指数
3
解决办法
1353
查看次数

如何将字节数组移位12位

我想将字节数组的内容向左移12位.

例如,从这个类型的数组开始uint8_t shift[10]:

{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xBC}
Run Code Online (Sandbox Code Playgroud)

我想将它向左移12位,结果是:

{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAB, 0xC0, 0x00}
Run Code Online (Sandbox Code Playgroud)

c arrays bit-shift bitset

12
推荐指数
2
解决办法
2万
查看次数

std :: bitset的二进制序列化

std::bitset有一种to_string()序列化为s和s 的char基于字符串的方法.显然,这对于bitset中的每个位使用单个8位,使得序列化表示比所需的长8倍. 我想将bitset存储在二进制表示中以节省空间.仅当我的bitset中少于32位时,该方法才有意义.我有几百个. 我不确定我是否想在对象(地址)本身上使用/ ,因为它假设对象是POD.10char
to_ulong()
memcpy()std::copy()

API似乎没有提供内部数组表示的句柄,我可以从中获取地址.

我还想选择从二进制表示中反序列化bitset.

我怎样才能做到这一点?

c++ binary stl bitset

12
推荐指数
1
解决办法
6276
查看次数

C++中bitset的大小是多少

我想知道bitset实际上如何分配内存.我从一些博客中读到,它占用了内存.但是当我运行以下代码时:

   bitset<3> bits = 001;
   cout<<sizeof(bits);
Run Code Online (Sandbox Code Playgroud)

我得到输出为4.它背后的解释是什么?

还有一种在C++中以位为单位分配空间的方法吗?

c++ memory-management bitset

12
推荐指数
3
解决办法
9276
查看次数

可变大小的bitset

我在数组上练习一个问题,我必须找到独特的元素.现在我的逻辑是找到数组中的max元素并为其定义bitset.但问题是bitset需要一个恒定的值,所以如何克服这个,下面是我的一些问题:

a)我可以用任何机会定义一个可变大小的bitset吗?
b)若没有,那么什么是用最好的方法vector<bool>还是vector<char>
c)我知道boost有一个动态bitset,但是当我这样做学习时,我想知道其他方法.

c++ bitset data-structures

12
推荐指数
1
解决办法
2万
查看次数

Java BitSet和byte []用法

我有这个应用程序,我应该BitSet大量使用类,并逐位写入文件.我知道我不能将位写入文件,所以首先我将BitSet对象转换为字节数组并写为字节数组.但问题是,因为BitSet类索引right to left,当我将BitSet对象转换为字节数组并写入文件时,它会向后写入.

例如,这是我的BitSet对象:

10100100
Run Code Online (Sandbox Code Playgroud)

和BitSet.get(0)给出false,BitSet.get(7)给出true.我想把它写成文件,如:

00100101
Run Code Online (Sandbox Code Playgroud)

所以第一位为0,最后一位为1.

我的转换方法:

public static byte[] toByteArray(BitSet bits) 
{
    byte[] bytes = new byte[(bits.length() + 7) / 8];       
    for (int i = 0; i < bits.length(); i++) {
        if (bits.get(i)) {
            bytes[bytes.length - i / 8 - 1] |= 1 << (i % 8);
        }
    }
    return bytes;
}
Run Code Online (Sandbox Code Playgroud)

我的写法:

    FileOutputStream fos = new FileOutputStream(filePath);
    fos.write(BitOperations.toByteArray(cBitSet));
    fos.close();
Run Code Online (Sandbox Code Playgroud)

这是打算像这样还是我做错了什么?谢谢.

java bytearray bitset

11
推荐指数
2
解决办法
6028
查看次数