Копирование битов

Опубликовано Sep 30, 2011 в Манипуляция битами | 1 коммент.

, ,

Дано два 32-х битных числа – A и B. Напишите функцию, которая бы скопировала биты из числа A в число B, начиная с бита под номером startBit и заканчивая битом под номером stopBit.

int copy_bits(int A, int B, int startBit, int stopBit)
{
 //ваш код
}

Критерии оценки FulcrumWeb:

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

Ожидаемые вопросы:

  1. Что должна вернуть функция, если входные параметры startBit и stopBit заданы некорректно?
  2. Так как словесная формулировка допускает разнообразные трактовки, можно попросить объяснить, что должно получиться для конкретных примеров.

Оценка результатов:

От начинающего программиста принимается любое работоспособное решение.

Более опытный программист, как мы надеемся, предложит решение без использования циклов.

Здесь мы опубликовали одно из возможных решений этой задачи.


Один комментарий : “Копирование битов”

  1. Владислав says:

    Как сделать без циклов пока не разобрался.

    int copyBits( int A, int B, int startBit, int stopBit) {
     
        if ((startBit > stopBit) 
                || !(stopBit >= 0 && stopBit <= 31)
                || !(startBit >= 0 && startBit <= 31) ) {
            cout << "Error";
            return -1;
         }
     
        for(int i = startBit; i<=stopBit; i++){
            if(( ((B&(1<<i))!=0) && ((A&(1<<i))!=0)) ||
                            (((B&(1<<i))==0) && ((A&(1<<i))==0)))
                continue;
            else  if(( ((B&(1<<i))!=0)) && (((A&(1<<i))==0)))
                A = A|(1<<i);
            else if(( ((B&(1<<i))==0)) && (((A&(1<<i))!=0)))
                A &= (~(1<<i));
        }
        return A;
    }

Оставить комментарий

Ваш адрес email не будет опубликован.


*