J'ai essayé de résoudre le premier problème de CTCI, qui implique la manipulation de bits, et je n'arrive pas à comprendre comment l'auteur a fait le masque avec précision dans sa solution finale. Quelqu'un pourrait-il expliquer les calculs de "int left", "int right", et "int mask"? Ce serait formidable de voir ce que ces lignes calculent spécifiquement pour l'exemple qu'il a fourni.Opérations sur les bits Cracking the Coding Interview
La question est: Vous avez deux nombres de 32 bits, N et M, et deux positions de bits, i et j. Ecrivez une méthode pour régler tous les bits entre i et j dans N égal à M (par exemple, M devient une sous-chaîne de N situé en i et commençant en j). EXEMPLE: entrée: N = 10000000000, M = 10101, i = 2, j = 6 sortie: N = 10001010100
public static int updateBits(int n, int m, int i, int j) {
int max = ~0; /* All 1’s */
// 1’s through position j, then 0’s
int left = max - ((1 << j) - 1);
// 1’s after position i
int right = ((1 << i) - 1);
// 1’s, with 0s between i and j
int mask = left | right;
// Clear i through j, then put m in there
return (n & mask) | (m << i);
}