Cracking The Coding Interview/Q 5.1

From Software Engineers Wiki
Jump to: navigation, search

You are given two 32-bit numbers, N and M, and two bit positions, land j. Write a method to insert M into N such that M starts at bit j and ends at bit i. You can assume that the bits j through i have enough space to fit all of M. That is, if M = 10011, you can assume that there are at least 5 bits between j and i. You would not, for example, have j = 3 and i = 2, because M could not fully fit between bit 3 and bit 2.

EXAMPLE

  • Input: N = 10000000000, M = 10011, i = 2, j = 6
  • Output: N = 10001001100

Answer

uint32_t bit_write_32(uint32_t orig, uint32_t data, unsigned int lsb, unsigned int msb)
{
        uint32_t bitmask;

        bitmask = (1 << (msb - lsb + 1)) - 1;
        data &= bitmask;
        data <<= lsb;

        bitmask <<= lsb;
        orig &= ~bitmask;
        orig |= data;

        return orig;
}

This function can be called with given parameters.

bit_write_32(M, N, j, i);
Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox