2015-03-13 42 views
1

我需要在两个向量之间进行按位运算。我不想使用循环。 我正在使用犰狳。任何人都可以帮助我吗?犰狳向量上的按位运算

编辑:

通过矢量我的意思是由犰狳库提供一个矢量模板。像这样:

urowvec newvec1 =零< urowvec>(5);

urowvec newvec2 = ones < urowvec>(5);

urowvec newvec3 = newvec1 | newvec2;

但这给了我错误与犰狳。

感谢

+0

你是什么意思?在最低级别,*每个*计算都是按位。 – Bathsheba 2015-03-13 14:21:53

+0

我不是指在最低水平。我正在谈论逻辑按位运算,比如AND,OR等等。 – user1482353 2015-03-13 14:26:51

+1

尝试std :: valarray – user3528438 2015-03-13 15:24:48

回答

1

如果您实现这一点:

inline urowvec operator|(const urowvec& lhs, urowvec& rhs){ 
    // ToDo - operate on an element by element basis, and return 
    // a urowvec. Decide on something reasonable if the vectors 
    // differ in size. 
} 

,并确保这是包含在每个编译单元中要求操作,然后urowvec newvec3 = newvec1 | newvec2;是有效的。

您可以为其他按位运算符做同样的事情。

任何合理的编译器将elide的值复制。

+0

谢谢。是否也可以通过使用SIMD命令来加速按位操作?如同,如果我可以一次操作整个向量(或其一部分),而不是进行元素明智的操作。 – user1482353 2015-03-13 17:41:58

0

做到位操作使用位运算符

| bitwise or 
& bitwise and 
^ bitwise xor 
~ bitwise not 
<< bitwise shift left 
>> bitwise shift right 

,如果你给一个更具体的问题,你可能会得到更具体的答案。通过矢量你是指一个std :: vector,它是一个ints矢量吗?或者你的意思是一些位?

+0

我编辑了我的问题。希望能够说清楚。 – user1482353 2015-03-13 14:34:22

+2

我不能直接用犰狳向量使用按位操作 – user1482353 2015-03-13 14:37:52

+0

同样在这里。 boolen的经营者不工作犰狳类型。试试这个吧, ucube a =零(3,3,3); a(1,1,1)^ = 1; – Naveen 2016-06-30 17:31:27