46 votes

Tutoriel "Bit Shifting" Java?

Je serais reconnaissant pour un bon tutoriel, qui explique aux débutants en Java comment en java tout le travail de "transfert de bits".

Je tombe toujours dessus, mais je n'ai jamais compris comment cela fonctionne. Il devrait expliquer toutes les opérations et tous les concepts possibles avec byteshifting / bitmanipulation en java.

Ceci est juste un exemple de ce que je veux dire (mais je cherche un tutoriel qui explique toutes les opérations possibles):

 byte b = (byte)(l >> (8 - i << 3));
 

34voto

Andrzej Doyle Points 52541

Ainsi, l'officiel de Java tutoriel au niveau du Bit et les Opérateurs de Décalage de Bits couvre les activités réelles qui sont disponibles dans Java, et la façon de les invoquer.

Si vous vous posez la question "que puis-je faire avec un décalage de bits", alors ce n'est pas Java spécifique, et puisqu'elle est d'un faible niveau technique, je ne suis pas au courant d'une liste de "choses cool que vous pouvez" faire soi. Il vaut la peine de se familiariser avec les définitions, et de garder vos yeux ouverts pour un autre code où il est utilisé, pour voir ce qu'ils ont fait.

Notez que souvent peu-tourner est un gain d'efficacité au détriment de la clarté. Par exemple, a << 1 est généralement le même que a * 2 mais sans doute moins clair. Répété XORs pouvez permuter les deux nombres sans utiliser une variable temporaire, mais il est généralement considéré comme une meilleure forme pour écrire du code plus clairement avec la variable temporaire (ou encore mieux, dans une méthode utilitaire). Donc, à cet égard, il est difficile de donner de bons exemples, parce que vous n'êtes pas susceptible de réaliser quelque chose de nouveau ou profonde sur une architecture de niveau; il est tout au sujet des détails de bas niveau. (Et je serais estimer qu'un grand nombre d'utilisations de bit-tourner "dans la nature" sont des instances de l'optimisation prématurée.)

15voto

Jeach Points 1753

Lors de l'utilisation de l'opérateur de décalage, être très prudent de ne pas répéter une erreur commune!!

Comme suit DONC post l'indique, l'auteur de la accepté de répondre mentionne:

"Dans certaines langues, en appliquant les opérateurs de décalage à tout type de données plus petits que les int redimensionne automatiquement l'opérande à être un int."

C'est absolument crucial de se rappeler lors de l'utilisation sur octets par exemple, sinon vous risquez d'obtenir des résultats inattendus (comme je l'ai fait).

Étant donné un octet avec le bit suivant le modèle:

1001 0000

Quand j'ai essayé de décalage de bits par 4, et attribué à un int, tels que:

int value = byteValue >>> 4;

Je m'attends à avoir:

0000 1001   (or a value of 9)

Mais je voudrais obtenir un grand nombre! C'est parce que la byteValue est coulé à l'int AVANT que l'opération de décalage de bits, ce qui résulte en quelque chose comme ceci à la place:

1111 1111 1111 1111 1111 1111 1001

13voto

Peter Lawrey Points 229686

Il y a un nombre infini de combinaisons possibles. Toutefois, ils seront composés d’une ou de plusieurs combinaisons de

 >> shift right with sign extension.
>>> shift right with out sign extension.
<< shift left.
 

Pour bien comprendre, je vous suggère d’écrire les nombres binaires sur papier et de déterminer ce qui se passe. Essayer de le lire dans un tutoriel ne garantit pas la compréhension. surtout s’ils n’ont pas aidé jusqu’à présent.

9voto

msb Points 131

Il y a un tutoriel simple mais clair que je trouve utile ici

5voto

mikera Points 63056

Ce n'est pas vraiment un tutoriel, mais j'ai un personnel de la bibliothèque de décalage de bits fonctions en Java qui vous êtes les bienvenus à l'étude!

Aussi, si vous faites une recherche google pour "bit-à-bit astuces" , vous trouverez beaucoup de matériel. Beaucoup de ces derniers sont en C/C++, mais sont généralement trivialement à se convertir à Java, comme la plupart de la syntaxe est la même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X