41 votes

Pourquoi 11010100 << 1 équivaut-il à 110101000 et non à 10101000 ?

Pourquoi quand j'essaye de décaler des bits pour 11010100 2 , le résultat est 110101000 2 , pas 10101000 2 .

 int a = Integer.parseInt("11010100", 2) << 1;

J'essaye de faire ça :

 int a = (byte)(Integer.parseInt("11010100", 2) << 1);

Mais si la valeur de sortie est supérieure à 128, tout passe en moins, ce qui est logique. Comment puis-je faire en sorte que le nombre de bits ne change pas ?

10voto

Eran Points 35360

Si vous souhaitez définir sur 0 tous les bits supérieurs aux 8 bits inférieurs, vous pouvez utiliser AND au niveau du bit :

 int a = (Integer.parseInt("11010100", 2) << 1) & 0xff;
System.out.println (Integer.toString(a,2));

Sortir:

 10101000

6voto

Puce Points 13540

Essayez quelque chose comme ceci :

 int anInt = Integer.parseInt("11010100", 2) << 1;
int asUnsignedInt= Byte.toUnsignedInt((byte) anInt);

toUnsignedInt a été introduit dans Java SE 8.

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