J'essaie de savoir comment java trouve que le résultat est -ve ou + ve pour les opérations au niveau du bit?
int x=-5;
int y=8;
System.out.println(x&y); //8
System.out.println(x|y); //-5
x->1 0 1 1 (2"s complement)
y->1 0 0 0
x & y -> 1 0 0 0 ->8
x | y -> 1 0 1 1 ->-5(2"s complement)
Comment java sait-il que 1 0 1 1 est -5?
pourquoi ne donne-t-il pas directement o / p comme 1 0 1 1 "s équivalent décimal 11?
Applique-t-il un complément de 2 "à chaque résultat?
J'ai vu le code de l'assemblée. Ce sont les instructions IAND et IOR.
Réponses:
4 pour la réponse № 1Vous exécutez les opérateurs au niveau des bits sur des entiers 32 bits. Ainsi, le nombre "8" a vraiment beaucoup de zéros devant, tandis que "-5" en a beaucoup:
8 -> 0...01000
-5 -> 1...11011
Ainsi, Java n'a pas besoin de "savoir" quoi que ce soit à propos dele résultat ou les opérandes des opérations de bitwiese. Le "8" est un nombre de 32 bits qui commence par un 0, il est donc positif. Le "-5" est un nombre de 32 bits qui commence par un "1", il est donc négatif.
Alors, la réponse à votre question
Applique-t-il un complément de 2 "à chaque résultat?
is: Oui, puisque tous les entiers sont signés numériquement en Java, en utilisant le complément de 2 ".