двоичное сравнение - PullRequest
       6

двоичное сравнение

2 голосов
/ 29 ноября 2011

Есть ли в c ++ функция для преобразования десятичного числа в двоичное без использования алгоритма деления?Я хочу посчитать разные биты двоичного формата из 2 чисел.как diff (0,2) 1 бит.или diff (3,15) составляет 2 бита.Я хочу написать функцию сравнения.спасибо

Ответы [ 3 ]

2 голосов
/ 29 ноября 2011

Вы можете узнать количество разных битов, посчитав их в xor двух чисел. Как то так.

int count_bits(unsigned int n) {
    int result = 0;
    while(n) {
        result += 1;
        // Remove the lowest bit.
        n &= n - 1;
    }
    return result;
}

int diff(unsigned int a, unsigned int b) {
    return count_bits(a ^ b);
}
0 голосов
/ 29 ноября 2011

Технически все уже в двоичном виде.Вам просто нужно начать смотреть на побитовые операторы, чтобы получить доступ к отдельным битам, составляющим десятичные числа, которые вы смотрите.

Например,

if (15 & 1) would check to see if 15 has its first bit turned on.
if (15 & 3) would check to see if its first 2 bits were turned on.
if (15 & 4) would check to see if its 3rd bit only was turned on.

Вы можете сделать это с помощью и / или/ XOR / и т.д..Google побитовые операторы и читать.

0 голосов
/ 29 ноября 2011

Вы можете использовать XOR для чисел (если Z = X XOR Y, то каждый бит, который устанавливается по-разному в X и Y, будет установлен в 1 в Z, каждый бит, который устанавливается одинаковым в X и Y, будет установленв 0) и подсчитать биты результата, используя простой цикл и сдвиг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...