2011-04-08 4 views
6

Je regardais un code qui génère un nombre à la forme binaire avec 0s préfixé.Java Bit Manipulation - Que fait (num >> = 1)?

byte number = 48; 
    int i = 256; //max number * 2 
    while((i >>= 1) > 0) { 
     System.out.print(((number & i) != 0 ? "1" : "0")); 
    } 

et ne comprenaient pas ce que le i >> = 1 fait. Je sais que l'i >> 1 se décale vers la droite d'un bit mais ne comprend pas ce que fait le "=" et AFAIK, il n'est pas possible de faire une recherche de ">> =" pour savoir ce que cela signifie.

+0

Une légère amélioration serait 'while ((i >>> = 1)! = 0)' car la boucle actuelle ne ferait rien si vous lui donniez 'i = 1 << 31' et vous ne pourriez jamais imprimer le bit haut d'un nombre de 32 bits. –

Répondre

11

i >>= 1 est juste shorhand pour i = i >> 1 de la même manière que i += 4 est court pour i = i + 4

EDIT: Plus précisément, ce sont les deux exemples de compound assignment operators.

+1

Et, spécifiquement, c'est un changement de signe. –

+0

Mathématiquement, le fait de déplacer un nombre de 1 équivaut à diviser le nombre par 2. – yasouser