C: Как перебрать двоичное представление числа и умножить - PullRequest
0 голосов
/ 12 декабря 2011

У меня длинное целое число (т. Е. 10001000110 ...) и массив с двойными значениями (т. Е. {.5, .76, .34, ...}), и я хотел бы перебрать двоичное представление моегоцелое число и умножьте каждую цифру на соответствующее место в моем массиве и сложите все вместе (умножение матрицы):

, например: 1 * .5 + 0 * .76 + 0 * .34 .....

Какой лучший способ сделать это в C?

Спасибо

Ответы [ 3 ]

5 голосов
/ 12 декабря 2011

Как то так?

int n = n_doubles;
double result = 0.0;

while (n--) {
    if ((long_integer>>n)%2)
        result += doubles[n_doubles - n];
}
1 голос
/ 12 декабря 2011

Подобно ответу Буддхаброта, это более явно выравнивает биты и элементы массива, но выравнивает LSB с index[0]:

double result = 0.0;

for(int x=0; x<n_doubles; x++){
    if(long_integer & (1<<x))
          result += doubles[x];
}
1 голос
/ 12 декабря 2011

РЕДАКТИРОВАТЬ: вопрос не ясен, но из последнего комментария автора кажется, что речь идет о получении битового представления целого числа.

Сначала вы должны использовать битовые маски, чтобы получить побитовое представление целого числа:

uint32_t theLongInt = <?>;
uint32_t mask = 0x00000001;

// bitwise representation of the integer theLongInt
uint8_t bits[30];

for(int i = 0; i < 30; i++) {
    if ( (theLongInt & mask) == 1)
        bits[i] = 1;
    else
        bits[i] = 0;
    mask = mask << 1;
}

Чем вы можете сделать цикл для суммирования и умножения.

Для повышения эффективности не храните побитовое представление целого числа, а выполняйте операции в одном цикле for.

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