Pourquoi les deux opérations suivantes donnent-elles des résultats différents en Java pour x = 31 ou 32 mais les mêmes résultats pour x=3 ? int x=3; int b = (int) Math.pow(2,x); int c = 1<<x; Résultats: x=32: b=2147483647; c=1; x=31: b=2147483647; c=-2147483648; x=3: b=8 ; c=8
J’ai vu à quelques endroits le code suivant recommandé d’append des nombres et de le diviser par 2, en particulier dans le contexte de la recherche d’un index intermédiaire dans un tableau à sortinger rapidement. int middle = ( low + high ) >>> 1; opposé à int middle = ( low + high ) […]
Je me prépare à un examen Java et je lis le “Guide d’étude du programmeur OCA Java SE 8 (Examen 1Z0-808)”. Dans la section des opérateurs, j’ai trouvé cette phrase: Opérateurs de décalage: un opérateur de décalage prend deux opérandes dont le type doit être convertible en une primitive entière. Je me sentais étrange avec […]
Dupliquer possible: pourquoi 1 >> 32 == 1? -1 en tant que int converti en binary est représenté par 32 1. Quand je le déplace à droite 31 fois, j’obtiens 1 (31 0 et un 1). Mais quand je le déplace à droite 32 fois, je reçois -1 à nouveau. Ne devrait-il pas être égal […]
En regardant le code source de la classe java.nio.DirectByteBuffer, j’ai trouvé ceci: if ((length < Bits.JNI_COPY_TO_ARRAY_THRESHOLD) …. Quel est le but de décaler la longueur de zéro bits? Est-ce que cela peut être une optimisation de la performance ou autre chose?
Y a-t-il une raison particulière pour laquelle ils manquent? Ils existent dans BigInteger , mais en raison du modèle de conception immuable de BigInteger ils sont généralement extrêmement lents. BitSet est beaucoup plus BitSet car il est modifiable, mais les fonctions de shift ( << et >>> pendant long ) me manquent vraiment. Pour BitSet […]
Pour le programme ci-dessous: public class ZeroFillRightShift { public static void main(Ssortingng args[]) { int x = -1; int y = x>>>1; System.out.println(“x = ” + x); System.out.println(“y = ” + y); } Je reçois la sortie comme suit: x = -1 y = 2147483647 Le résultat que j’ai pour -1>>>1 est 2147483647. Si c’est […]
D’accord, j’ai essayé de regarder ce que signifie >>, ou «shift», mais cela dépasse mon esprit, comme l’explique ce site: http://www.janeg.ca/scjp/oper/shift.html Alors, quelqu’un peut-il expliquer comme si ils parlent à un enfant?
Quelqu’un peut-il expliquer pourquoi les expressions de bits suivantes renvoient des résultats différents: System.out.println((-1<<31)<<1); // it prints 0 System.out.println(-1<<32); // it prints -1
Quel est le but d’utiliser des opérateurs Shift plutôt que d’utiliser la division et la multiplication? Y a-t-il d’autres avantages à utiliser des opérateurs de quart? Où faut-il essayer d’utiliser l’opérateur de quart?