Двоичная математика

Discussion in 'Болталка' started by cupper, 20 Sep 2010.

  1. cupper

    cupper Elder - Старейшина

    Joined:
    6 Jun 2007
    Messages:
    370
    Likes Received:
    92
    Reputations:
    5
    задание:
    установить в числе x n битов начиная с позиции p равными крайним n битам числа y.
    Пример:
    x = 1110 0010 1100
    p = 7
    n = 4
    y = 1100 1010 1101
    результат должен быть таков
    1110 1101 1100

    Единственно до чего я додумался это:
    1. в числе x нужные n бит сделать единичными
    2. получить число вида 111 [n бит из числа y] 1111
    3. первое & второе

    вот как я это смог реализовать
    вот функция которая реализует эти три шага
    Code:
    unsigned setbits(unsigned x, int p, int n, unsigned y)
    {
        unsigned first = x | ~(~0<<(p+1) | ~(~0<<(p+1-n)));
        unsigned second = ((y | (~0<<n))<<(p + 1 - n)) | ~(~0<<(p + 1 - n));
        return first & second;
    }
    
    я уверен есть решение проще, просто я его не могу найти.
     
Loading...