我有一个很大的位,我想经常重置其中的各个位.哪种方法更快?
一个) bitset[word_index] ^= 1 << bit_index
要么
b) bitset[word_index] &= ~(1 << bit_index)
该应用程序适用于桌面(如果它起作用).
在Java中,您可以创建一个大小为8的BitSet并将其存储为一个字节以便输出吗?BitSets上的文档没有提到它.这是不是意味着什么?
java.util.BitSet由long []支持,因此最小大小为64位.我需要缓存大量(~2M)的对象,每个对象都需要一个大小为23的BitSet.对于小尺寸,BitSet是否有更多的空间效率?例如,是否有一个BitSet类型的数据结构,由byte []而不是long []支持?这将允许我将我的23位存储在3个字节而不是8个字节中.
如何计算new BitSet(n) C++中的内存.
Java中有什么内存new BitSet(1024).
但似乎Java的公式是不同的.我想计算用于的内存new BitSet(100000),请你帮忙吗?
我只是惊讶地发现,java.util.BitSet没有containsAll方法.我需要的是以下内容:
BitSet s1 = newBitSet(1, 2, 3, 4, 6);
BitSet s2 = newBitSet(1, 2, 3, 4);
BitSet s3 = newBitSet(1, 2, 3, 4, 5);
assertTrue(containsAll(s1, s2));
assertFalse(containsAll(s1, s3));
private static BitSet newBitSet(int... values) {
BitSet bitSet = new BitSet();
for (int value : values) {
bitSet.set(value);
}
return bitSet;
}
Run Code Online (Sandbox Code Playgroud)
实现containsAll方法的最佳变体是什么?有没有比这样迭代更优雅的方式?(从JavaDoc获取的wird迭代代码)
private static boolean containsAll(BitSet s1, BitSet s2) {
for (int i = s2.nextSetBit(0); i >= 0; i = s2.nextSetBit(i + 1)) {
if …Run Code Online (Sandbox Code Playgroud) 我只是尝试使用~运算符在C++中进行按位补码:
例如:
NOT 0101
--------
1010
Run Code Online (Sandbox Code Playgroud)
所以在下面的代码中,我期待得到1010但我得到负数.虽然我用unsigned类型定义值,但是怎么可能?
#include <iostream>
#include <stdio.h>
#include <string>
#include <bitset>
using namespace std;
int tob(int num) {
if (num == 0)
return 0;
return (num % 2) + 10*tob(num/2);
}
long unsigned int tol(string st) {
long unsigned int num = bitset<100>(st).to_ulong();
return num;
}
int main()
{
unsigned int x = tol("0101");
unsigned int z = ~x;
printf("%10d (decimal %u)\n", tob(z), z);
// -110 (decimal -6)
cout << …Run Code Online (Sandbox Code Playgroud) 我有一堂课
template <class MAX>
class A
{
std::bitset<MAX> _mem ;
}
Run Code Online (Sandbox Code Playgroud)
此类的目的是使我可以拥有可变长度的位集。在我程序的不同部分中使用。
但是c完成给我错误
template argument for non type template parameter should be an expression
Run Code Online (Sandbox Code Playgroud) 我有一个函数,我想在其中执行OR,AND,set等操作.我首先考虑了一个布尔数组,但问题是我无法对它们执行AND和OR运算(但我可以将特定元素设置为true).我也试过使用BiSet,但问题是BitSet的最小尺寸是64(位).我希望它存储一个特定数量的位(例如15个),我可以从中迭代以获取它们的包含.在C#中,有BitArray类来处理这样的问题; Java似乎没有这样的.任何有关此问题的建议都将受到高度赞赏
我正在学习有点操作然后我想到了这一点.假设我有两个数字,第一个在[1,6]的范围内,第二个在[0,3]的范围内.现在第一个数字可以存储最多3个比特,第二个数字可以存储2个比特.我如何使用一个int32将它们都存储在其中.谢谢.
我可以创建一个C++ 11模板函数来显式地将bitset转换为unsigned long:
template<size_t N>
unsigned long U(bitset<N> x) {
return x.to_ulong();
}
// Explicit conversion
unsigned long y = U(bitset<4>("1010"));
Run Code Online (Sandbox Code Playgroud)
有没有办法使用C++ 11模板帮助函数"隐式"将bitset转换为unsigned long.例如,如果我将一个bitset分配给unsigned long,那么我希望它自动将bitset转换为正确的类型:
// What Template Function in C++11?
// Implicit Conversion
unsigned long z = bitset<4>("1010");
Run Code Online (Sandbox Code Playgroud)
(如果不可能使用C++ 11模板函数创建一个隐式转换规则转换为"unsigned long",那么从bitset派生一个具有转换函数到unsigned long的新类也是可以接受的.这也可能吗? )