Update Bits | The Walking Dad
Given two 32-bit numbers, N and M, and two bit positions, i and j. Write a method to set all bits between i and j in N equal to M (e g , M becomes a substring of N located at i and starting at j)
Example
Given N=(10000000000)2, M=(10101)2, i=2, j=6
return N=(10001010100)2
Note
In the function, the numbers N and M will given in decimal, you should also return a decimal number.
Challenge
Minimum number of operations?
Clarification
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.
public void updateBits(int n, int m, int i, int j) {
int max = ~0; // All 1
int right = (1 << i) - 1;
int left = max - ((1 << j) - 1);
int mask = left | right;
int finalnum = (n & mask) | (m << i);
System.out.println("N: " + Integer.toBinaryString(n));
System.out.println("M: " + Integer.toBinaryString(m));
System.out.println("Out: " + Integer.toBinaryString(finalnum));
}
Read full article from Update Bits | The Walking Dad
Given two 32-bit numbers, N and M, and two bit positions, i and j. Write a method to set all bits between i and j in N equal to M (e g , M becomes a substring of N located at i and starting at j)
Example
Given N=(10000000000)2, M=(10101)2, i=2, j=6
return N=(10001010100)2
Note
In the function, the numbers N and M will given in decimal, you should also return a decimal number.
Challenge
Minimum number of operations?
Clarification
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.
int updateBits(int n, int m, int i, int j) { int mask_len = j - i + 1; unsigned int mask = mask_len == 32 ? 0xffffffff : ((1 << mask_len) - 1); return (n & (~(mask << i))) | ((m & mask) << i); }https://github.com/rohitkandhal/project-ft/blob/master/src/home/BitManipulation.java
public void updateBits(int n, int m, int i, int j) {
int max = ~0; // All 1
int right = (1 << i) - 1;
int left = max - ((1 << j) - 1);
int mask = left | right;
int finalnum = (n & mask) | (m << i);
System.out.println("N: " + Integer.toBinaryString(n));
System.out.println("M: " + Integer.toBinaryString(m));
System.out.println("Out: " + Integer.toBinaryString(finalnum));
}
Read full article from Update Bits | The Walking Dad