按位運算符是非常有趣的,所以我試圖找出一種方式來產生或相反的效果,但不是xor的效果。按位或0
如果我有兩個字符(8位):
char1 char2
===== =====
1010 1000
after transformation
1000 1000
如果0010
是我想轉移CHAR1和CHAR2禁止在該註冊的值(位置1)
我會怎麼做那?
or
只設置1,如果1和1,而如果1和0或0和1
按位運算符是非常有趣的,所以我試圖找出一種方式來產生或相反的效果,但不是xor的效果。按位或0
如果我有兩個字符(8位):
char1 char2
===== =====
1010 1000
after transformation
1000 1000
如果0010
是我想轉移CHAR1和CHAR2禁止在該註冊的值(位置1)
我會怎麼做那?
or
只設置1,如果1和1,而如果1和0或0和1
的相反或特定位是而不是。您可以使用或來設置位,而而不是來清除位。
#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);
}
+1:'你可以使用或設置位,而不是清除位' –
我相信你想& (and)
xor
只交換值:
1100 & 1010 = 1000
它經常與反轉用於設置爲0。
1100 & ~0100 = 1100 & 1011 = 1000
當比特不同時xor會給出1 ......它並不完全「交換」它們。所以'1010'帶着'1000'帶着'0010' ......是你想要的嗎? – Dmitri
對不起,不詳細。 1010的東西0010應該給1000的值,另外1000和0010應該給1000 – MysteryDev
@MysteryDev那些是矛盾的要求,或者你正在尋找的操作符不是內置的,它們都是**對稱的。 – 2014-01-27 07:13:33