Opérations au niveau du bit et des changements

Im un peu de mal à comprendre comment et pourquoi ce code fonctionne de la manière qu'il le fait. Mon partenaire dans cette mission terminé cette partie et je ne peux pas mettre la main sur lui pour savoir comment et pourquoi cela fonctionne. J'en ai essayé des choses différentes pour le comprendre, mais toute aide serait grandement appréciée. Ce code est à l'aide de complément de 2 et une de 32 bits représentation.

/* 
 * fitsBits - return 1 if x can be represented as an 
 *  n-bit, two's complement integer.
 *   1 <= n <= 32
 *   Examples: fitsBits(5,3) = 0, fitsBits(-4,3) = 1
 *   Legal ops: ! ~ & ^ | + << >>
 *   Max ops: 15
 *   Rating: 2
 */
int fitsBits(int x, int n) {
    int r, c;
    c = 33 + ~n;
    r = !(((x << c)>>c)^x);
    return r;
}
C'est lourd de sorcellerie. Vous n'êtes pas vraiment censé comprendre, il suffit de l'accepter comme la sagesse d'en haut. Indice: Il s'adapte si tous les bits à gauche de la position n-1 ont la même valeur que le peu que la position n-1.
Découvrez ce que chaque opérateur n' (et comprendre complément de 2), puis discuter de ce qui allait arriver à différentes valeurs d'entrée. Il faut beaucoup de pratique pour être en mesure de facilement lire quelque chose comme ci-dessus.
c'est... magnifique :O
nice sort! vraiment magique

OriginalL'auteur Scalahansolo | 2013-02-09