Skip to content

Instantly share code, notes, and snippets.

@happyWinner
Created July 27, 2014 12:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save happyWinner/b8205432cf5317e80108 to your computer and use it in GitHub Desktop.
Save happyWinner/b8205432cf5317e80108 to your computer and use it in GitHub Desktop.
/**
* You are given two 32-bit numbers, N and M, and two bit positions, i and 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
*
* Time Complexity: O(1)
* Space Complexity: O(1)
*/
public class Question5_1 {
public int insert(int m, int n, int i, int j) {
return (m << i) | (((1 << i) - 1) | ~(-1 >>> (31 - j))) & n;
}
public static void main(String[] args) {
Question5_1 question5_1 = new Question5_1();
System.out.println(Integer.toBinaryString((question5_1.insert(0b10011, 0b10000000000, 2, 6))));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment