如何在LLVM Bitvectors上运行?

问题描述 投票:1回答:1

(如果这很直接,我很抱歉,我不熟悉C ++)

我有

#include <llvm/ADT/BitVector.h>

查看定义文件,它定义

// Intersection, union, disjoint union
bitVector &operator&=(const BitVector RHS) { ... }

我想做两位向量的并集;这似乎是交集的定义,所以我猜测交集将是这样的:

bitVector1 &= bitVector2;

它是否正确?再往下,它宣布,没有评论,

bitVector &operator|=(const bitVector &RHS) { ... }

假设这是联盟运营商会纠正吗? (位操作是| =)

谢谢您的帮助!

c++ llvm llvm-clang
1个回答
4
投票

&=对LHS和RHS BitVector操作数的各个元素执行逻辑AND,并将结果存储在LHS操作数中。

|=对LHS和RHS BitVector操作数的各个元素执行逻辑OR,并将结果存储在LHS操作数中。

一个最小的例子:

#include <iostream>
#include <llvm/ADT/BitVector.h>

llvm::BitVector  bitVector1(10, true);
llvm::BitVector  bitVector2(10, false);
llvm::BitVector  bitVector3(10, true);

int main()
{
    for(int i = 0; i < bitVector1.size(); i++)
        std::cout << bitVector1[i] << ' ';
    std::cout << '\n';        

    bitVector2[4] = true; //5th element set to true

    bitVector1 &= bitVector2;

    for(int i = 0; i < bitVector1.size(); i++)
        std::cout << bitVector1[i] << ' ';
    std::cout << '\n';


    bitVector1 |= bitVector3;


    for(int i = 0; i < bitVector1.size(); i++)
        std::cout << bitVector1[i] << ' ';
    std::cout << '\n';        

}

输出:

1 1 1 1 1 1 1 1 1 1 
0 0 0 0 1 0 0 0 0 0 
1 1 1 1 1 1 1 1 1 1 

Live Demo

© www.soinside.com 2019 - 2024. All rights reserved.