6
votes

Utilisation de la manipulation de bits pour dire si un entier non signé peut être exprimé sous la forme 2 ^ n-1

Pour tester si un entier non signé est de la forme 2 ^ n-1 Nous utilisons: xxx

Qu'est-ce que c'est censé égaler? C'est-à-dire xxx


0 commentaires

3 Réponses :


7
votes

Un certain nombre de formulaires 2 ^ n-1 code> aura toutes les bits jusqu'au NTH Set. Par exemple, 2 ^ 3-1 code> (7) est le suivant: xxx pré>

Si nous en ajoutant un à cela, nous obtenons 8: p>

0b1000


4 commentaires

Je pense que vous vouliez dire 2 ^ n-1 au début


Pendant que vous et l'autre répondeur, faites un bon travail d'expliquer pourquoi il est nécessaire que x & (x + 1) == 0 pour x soit du formulaire 2 ^ n-1 , aucun de vous n'a même pas allusion à la suffisance de la propriété. Ou dans d'autres termes, pourquoi ne peut pas un numéro x qui n'est pas écrit 0b0111..11 ne pas avoir la propriété x & (x + 1) == 0 0 0 ?


@Pascal: Si vous souhaitez répondre et aller plus en détail, je serais heureux de uplifier une telle réponse. :-)


@James je suis allé de l'avant et j'ai rédigé une courte explication.



5
votes

zéro. Si X est 2 ^ n-1, il s'agit d'une chaîne ininterrompue de 1 en binaire. Un de plus que cela est un 1 suivi d'une chaîne de zéros de même longueur que x, les deux nombres n'ont donc pas de bits en commun dans n'importe quel endroit, de sorte que le et les deux est zéro.


0 commentaires

6
votes

En complément aux réponses existantes, voici une explication courte de la WHERE NUMÉROS X qui ne sont pas du formulaire 0B00000 (zéro) ou 0B0111 .. 11 (tous les chiffres les plus bas, ceux-ci sont tous les numéros 2 ^ n-1 pour N> 0) Ne pas avoir la propriété x & (x + 1) == 0 .

Pour un numéro x du formulaire 0b ???? 1000..00 , x + 1 a les mêmes chiffres que x sauf pour le bit le moins significatif, donc x & (x + 1) a au moins un bit défini, le bit qui a été affiché comme étant défini dans x . À titre d'explication plus courte: xxx

pour un numéro x du formulaire 0b ???? 10111..11 :: xxx

en conclusion, si x n'est ni zéro ni écrit en binaire avec tous les chiffres les plus bas définis, puis x & (x +1) n'est pas zéro.


0 commentaires