2015-03-13 95 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