2014-01-27 45 views
1

按位運算符是非常有趣的,所以我試圖找出一種方式來產生或相反的效果,但不是xor的效果。按位或0

如果我有兩個字符(8位):

char1 char2 
===== ===== 
1010  1000 

after transformation 

1000  1000 

如果0010是我想轉移CHAR1和CHAR2禁止在該註冊的值(位置1)

我會怎麼做那?

or只設置1,如果1和1,而如果1和0或0和1

+1

當比特不同時xor會給出1 ......它並不完全「交換」它們。所以'1010'帶着'1000'帶着'0010' ......是你想要的嗎? – Dmitri

+0

對不起,不詳細。 1010的東西0010應該給1000的值,另外1000和0010應該給1000 – MysteryDev

+0

@MysteryDev那些是矛盾的要求,或者你正在尋找的操作符不是內置的,它們都是**對稱的。 – 2014-01-27 07:13:33

回答

7

相反或特定位是而不是。您可以使用來設置位,而而不是來清除位。

#include <assert.h> 

int main() { 
    int a = 16, b, c; 

    // Set bit 3 
    b = a | 1<<3; // OR 
    assert(b == (8+16)); 


    // Clear bit 3 
    c = b & ~(1<<3); // AND-NOT 
    assert(c == 16); 
} 
+0

+1:'你可以使用或設置位,而不是清除位' –

3

我相信你想& (and)xor只交換值:

1100 & 1010 = 1000 

它經常與反轉用於設置爲0。

1100 & ~0100 = 1100 & 1011 = 1000