簡體   English   中英

如何比較C中的兩位值?

[英]How to compare two bit values in C?

我一直在研究C語言,我發現能夠直接操作位令人着迷且功能強大(我想這很危險)。 我很好奇,最好的方法是比較C中的不同位。 例如,數字15用二進制表示為:

00001111

數字13表示為:

00001101

您如何比較哪些位數不計而又不算? 容易使用移位來確定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++;
      }  
 }

使用按位運算:

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

^或XOR的作用是:

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

一種思考的方式是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM