# Cracking The Coding Interview/Q 5.1

From Software Engineers Wiki

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);