Bit-à-bit “& ” sur une longue?

Je veux obtenir le moins de 32 bits à partir d'un nombre de type long, donc j'ai effectuer l'opération au niveau du bit "&" sur le nombre de bits du masque 0xFFFFFFFF, mais le résultat n'est pas correct, il contient toujours les autres bits.

par exemple:

long a = 0x1234567890ab; 
long b = (a & 0xffffffff);

J'attends la valeur de b à 0x567890ab

mais dans la pratique, il est toujours 0x1234567890ab

  • En tant que programmeur C (+25 ans), je suis habitué à utiliser unsigned variables afin d'éviter l'extension du signe de questions, mais dans ce cas je devrais avoir enseignée à ajouter le L à la fin de mon littérale. Je suis en train d'apprendre le java et je vais probablement tomber dans certains autres pièges :o)
  • Putain de bonne question. Je viens de tomber sur ce et la réponse a été tout à fait une surprise. Est-ce un manque de Java casse-têtes? 🙂