[英]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
一種思考的方式是:
如果兩個操作數(
a
和b
)不同,則結果為1
。
如果它們相等,則結果為0
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.