Очень коротко, у меня проблемы с пониманием работы этого кода, гораздо эффективнее, чем мои 20 или около того строк, получить тот же результат.Я понимаю, как должен работать левый сдвиг, и побитовый Или, но был бы признателен за небольшое руководство, чтобы понять, как эти два собираются вместе, чтобы заставить работать цикл for.Код предназначен для того, чтобы принимать массив битов (битов) заданного размера (счетчика) и возвращать целочисленное значение битов.
unsigned binary_array_to_numbers(const unsigned *bits, size_t count) {
unsigned res = 0;
for (size_t i = 0; i < count; i++)
res = res << 1 | bits[i];
return res;
}
РЕДАКТИРОВАТЬ: По запросу, мое решение для новичка, которое все еще прошло всетесты: добавлен пример возможного назначения битов []
unsigned binary_array_to_numbers(const unsigned *bits, size_t count)
{
int i, j = 0;
unsigned add = 0;
for (i = count - 1; i >= 0; i--){
if(bits[i] == 1){
if(j >= 1){
j = j * 2;
add = add + j;
}
else{
j++;
add = add + j;
}
}
else {
if( j>= 1){
j = j * 2;
}
else{
j++;
}
}
}
return add;
}
void main(){
const unsigned bits[] = {0,1,1,0};
size_t count = sizeof(bits)/sizeof(bits[0]);
binary_array_to_numbers(bits, count);
}