Я немного поболтал с 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++;
}
}