标签: bitset

我需要创建一个非常大的位/布尔值数组.我如何在C/C++中做到这一点?

甚至可以创建一个超过100000000个元素的位数组?如果是的话,我该怎么做呢?我知道对于char数组我可以这样做:

char* array;

array = (char*)malloc(100000000 * sizeof(char));

如果我要在char array[100000000]那时声明数组,那么我会得到一个分段错误,因为已经超出了最大数量的元素,这就是我使用的原因malloc.

有什么类似的东西,我可以做一个位数组?

c c++ arrays bitset

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

std::bitset 上的位扫描(bsf)?或类似

我正在做一个项目,涉及解决一些 NP 难图问题。特别是贝叶斯网络的三角测量......

不管怎样,我使用 std::bitset 来创建邻接矩阵,这非常好......但我想使用 bsf 指令扫描位集。例如使用 while 循环。

有人知道这是否可能吗?

c++ bitset

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

使用具有浮动类型的bitset

你有浮动数据类型的bitset容器吗?例:

bitset<sizeof(float)*sizeof(char)> second(5.5f);
cout << second.to_string() << endl;
Run Code Online (Sandbox Code Playgroud)

它无法正常工作.我想要做的是获得位代表.

c++ floating-point bitset

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

为什么你会在java中使用BitSet而不是布尔数组(在Java中)?

除了可用方法的不同之外,为什么有人会使用BitSet而不是布尔数组呢?某些操作的性能是否更好?

java bit-manipulation bitset

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

没有为long int正确打印位表示

我试图打印一个长整数的位表示.我正在使用这个变量作为我的国际象棋程序的位板.但是,表示未正确打印.我使用以下代码.

void displayBoard()
{

    bitset<64>x(fullBoard);
    cout<<x<<fullBoard<<endl;
    for(int i=0;i<64;i++)
    {
        if(fullBoard & (1<<i))
        {
            cout<<"1";
        }
        else
        {
            cout<<"0";
        }
    }

}  
Run Code Online (Sandbox Code Playgroud)

前两行使用bitset类将其转换为二进制表示并打印它.

但是,当我尝试使用for循环中的代码执行相同操作时,它给出了以下输出:
1111111111111111000000000000000111111111111111110000000000000001
正确的输出是:
1111111111111111000000000000000000000000000000001111111111111111

fullBoard我使用的价值是:0xFFFF00000000FFFF

我正在使用以下命令使用C++ 11进行编译: g++ board.cpp -std=c++11

为什么这段代码输错了?我不认为for循环中有任何错误.

c++ binary bitset c++11

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

为什么std :: bitset :: reference :: operator~?

我正在阅读文档,std::bitset我想知道为什么std::bitset::reference明确定义,operator~因为我没有看到任何性能或设计原因.没有它,我认为它同样有效:

bool b = ~mybitset[i];
Run Code Online (Sandbox Code Playgroud)

因为引用将转换为bool,~操作符将应用于bool .

对此设计决定有何解释?

c++ standards std bitset

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

如何将redis位图(二进制字符串)转换为前导零的二进制数?

我使用redis位图来记录一年中的用户操作,如果用户在一年中的第一天登录,我会将密钥的第一位设置为1. redis值如下:

key:user.18.action(18是用户id)
值:(位图)000100000000000000000000 ...(约365位长)

但当我试图获得价值时,GET user.18.action返回"\x10".

在PHP中,如何将这些字符串转换为该字符串000100000000000000000000...

实际上,我使用下面的代码来实现它,但这样可以吗?并且有更好的解决方案吗?

$bitmap = $this->redis->get('user.18.action');
$binstrlen = strlen($bitmap);
$hex = bin2hex($bitmap);
$str = str_baseconvert($hex, 16, 2);
var_dump(str_pad($str, $binstrlen * 8, '0', STR_PAD_LEFT));

function str_baseconvert($str, $frombase=10, $tobase=36) { 
    $str = trim($str); 
    if (intval($frombase) != 10) { 
        $len = strlen($str); 
        $q = 0; 
        for ($i=0; $i<$len; $i++) { 
            $r = base_convert($str[$i], $frombase, 10); 
            $q = bcadd(bcmul($q, $frombase), $r); 
        } 
    } 
    else $q = $str; 

    if (intval($tobase) != …
Run Code Online (Sandbox Code Playgroud)

php bitmap bitset redis

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

将 byte[] 转换为 BitSet

我正在尝试将字节数组转换为 BitSet。以下是我正在使用的代码:

public BitSet byteToBits(byte[] bytearray){
    BitSet returnValue = new BitSet(bytearray.length*8);
    ByteBuffer  byteBuffer = ByteBuffer.wrap(bytearray);
    //System.out.println(byteBuffer.asIntBuffer().get(1));
    //Hexadecimal values used are Big-Endian, because Java is Big-Endian
    for (int i = 0; i < bytearray.length; i++) {
        byte thebyte = byteBuffer.get(i);
        for (int j = 0; j <8 ; j++) {
            returnValue.set(i*8+j,isBitSet(thebyte,j));
        }
    }
    return returnValue;
}

private static Boolean isBitSet(byte b, int bit)
{
    return (b & (1 << bit)) != 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 JUnit 测试对其进行测试,如下所示。

@org.junit.Test
public void byteToBits() throws …
Run Code Online (Sandbox Code Playgroud)

java byte bits bitset

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

std::bitset&lt;N&gt;::count 与 __builtin_popcount

比较以下两个表达式

std::bitset<8>(5).count()
__builtin_popcount(5)
Run Code Online (Sandbox Code Playgroud)

哪一个更好?

c++ bitset

3
推荐指数
2
解决办法
2186
查看次数

这个方程如何 x + y = x &amp; y + x | y 成立(假设 x, y &gt; 0)?

我最近参加了一个代码力量竞赛。在比赛的编辑部分,我看到了按位运算符之间的一种美妙关系,即 x + y = x & y + x | 是的 我还不知道证明。我拿了几个数字来看看这个等式是否正确。我很高兴知道这个证明。我在网上查了一下,没有找到任何有意义的参考资料。请帮我找到证据,或者至少给我这个美丽等式背后的直觉。提前致谢

c++ bit bitset

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

标签 统计

bitset ×10

c++ ×7

java ×2

arrays ×1

binary ×1

bit ×1

bit-manipulation ×1

bitmap ×1

bits ×1

byte ×1

c ×1

c++11 ×1

floating-point ×1

php ×1

redis ×1

standards ×1

std ×1