2011-09-20 39 views
1

我一直在與C聊天,我發現能夠直接操縱位是迷人的和強大的(並且我認爲是危險的)。我很好奇,比較C中不同位的最好方法是什麼。例如,15號以二進制爲表示:如何比較C中的兩個位值?

00001101 

你如何比較哪位沒有計算他們的不同:

00001111 

而且數量13表示?使用移位很容易確定15包含4 1和13包含3 1,但是如何輸出兩者之間的差異(例如,2^1點在兩者之間是不同的)?我只是想不出一個簡單的方法來做到這一點。任何指針將非常感激!

編輯:我應該澄清,我知道XOR是正確的方式去解決這個問題,但我有一個問題與實施。我想我的問題是每次比較一個比特(而不是每個人都會產生差異)。我想出瞭解決的辦法是:

void compare(int vector1, int vector2) {   
    int count = 0; 
    unsigned int xor = vector1^vector2; 

    while (count < bit_length) { 
      if (xor % 2 == 1) { //would indicicate a difference 
       printf("%d ", count); 
      } 
      xor >>= 1; 
      count++; 
     } 
} 
+1

那就是'XOR'。 –

+1

操縱比特沒有什麼神奇或危險 - 它們只是一個數字的個別數字。 – Crashworks

+2

http://stackoverflow.com/questions/1746613/bitwise-operation-and-usage/1746642#1746642 – paxdiablo

回答

14

使用按位運算:

c   = a  ^b  ; 
00000010b = 00001111b^00001101b; 

什麼^,或XOR,做的是:

0^0 = 0 
1^0 = 1 
0^1 = 1 
1^1 = 0 

一種思考的方式它將是:

如果兩個操作數(ab)不同,則結果爲1
如果它們相等,則結果爲0