2017-06-10 1 views
1

Récemment, j'ai appris sur les opérateurs de manipulation de bits et le long du chemin il y a ce code qui trouve les chiffres binaires d'un nombre décimal en utilisant le ET (&) opérateur de bits, le code est le suivant:compréhension java manipulation de bits

byte b = -34; 

for(int t = 128;t > 0; t = t/2) 
{ 
if((b & t) != 0)System.out.println("1 "); 
else System.out.println("0 "); 
System.out.println("b & t yields: " + (b & t)); 
    } 

J'ai modifié le code pour montrer la valeur calculée par b & t à chaque itération. Je voudrais comprendre le mécanisme exact derrière ce code pour savoir pourquoi cela fonctionne pour trouver les chiffres binaires, s'il vous plaît expliquer pourquoi b est comparé à t chaque itération et pourquoi t est divisé par 2 chaque itération?

En outre, je voudrais savoir comment (b & t) calculé manuellement en indiquant le digits.I binaire ont un & comprendre comment fonctionne mais quand j'ai énuméré les chiffres binaires de 34 et 128 et les comparais :

1 0 0 0 0 0 0 0(128) 
0 0 1 0 0 0 1 0(34) //I am unsure if the negative sign should be included 
--------------- 
0 0 0 0 0 0 0 0 

le résultat que j'ai obtenu était 0, mais le programme renvoie 128 qui est perplexe.

Ci-dessous je vais inclure aussi le résultat de l'exécution du programme:

1 
b & t yields: 128 
1 
b & t yields: 64 
0 
b & t yields: 0 
1 
b & t yields: 16 
1 
b & t yields: 8 
1 
b & t yields: 4 
1 
b & t yields: 2 
0 
b & t yields: 0 

Bien obligé pour l'aide :)

+1

De nos jours, les ordinateurs utilisent le complément à deux, donc '-34' est représenté par' 256-34' comme un octet non signé. – user202729

+0

Merci beaucoup, il est logique que -34 & 128 retour 128 maintenant :) – TheRelativisticPhiloSheep

Répondre

0

t par 2 La division est un peu de décalage vers la droite:

1 0 0 0 0 0 0 0 128 = t 
0 1 0 0 0 0 0 0 64 = t/2 
0 0 1 0 0 0 0 0 32 = t/2/2 
... 

t a toujours un bit à 1, tous les autres sont 0.

Ensuite, vous comparez cela à b en utilisant &. Chaque bit de résultat est 1 si et seulement si le bit correspondant dans les deux entrées est également 1. Cela signifie que nous vérifions essentiellement si le bit b est 1 à l'emplacement où t -bit est 1. Cela est fait pour tous les bits de gauche à droite.

+0

C'est ce dont j'avais besoin merci! – TheRelativisticPhiloSheep