IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

pb Et bit à bit


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 44
    Par défaut pb Et bit à bit
    Bonjour, je voudrais savoir à quoi sert cette opération & 0xffffffff, j 'ai lu que c'était censé rendre un nombre signé, non-signé.

    Par contre, quand je le teste ça ne change rien

    int res = -2 &0xffffffff;

    res est égal à -2.

    Est-ce que je me trompe en l'exécutant ? Qu'elle est sa véritable fonction ?

  2. #2
    Membre confirmé

    Inscrit en
    Août 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 14
    Par défaut
    oui c'est juste mais il faut faire attention à la taille des types
    par defaut, java utilise des int (taille: 4 bytes)

    vu que ton masque est aussi sur 4 bytes (0xffffffff), tu dois utiliser un type plus grand pour ta conversion: long (taille: 8 bytes)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long res = -2L &0xffffffffL;
    sinon, utilise un masque plus petit

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 44
    Par défaut
    Ok merci pour ta réponse, je n'ai pas tout saisi cette histoire de masque plus grand, je vais essayer de me renseigner plus amplement afin de mieux saisir.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    avec un int, ça n'a aucun effet, c'est une opération neutre.
    avec un long (64 bit), ca a pour effet de ne garder que les 32 bits de poids faible. ça annulera donc le bit de signe sur le Long. Combiné à la règle de promotion int -> long ça aura pour effet final de récupérer la valeur en non signé.

    Prenons un exemple

    Soit l'entier 0xf0000000, qui vaut 4026531840 en arithmétique non signée mais en arithmétique signée (donc dans un int)vaut -268435456

    Convertis en long, ça donne 0xfffffffff0000000, qui conserve la veleur signée de -268435456. Lorsque, dans un deuxième temps j'applique le masque, j'obtiens comme long 0x00000000F0000000, soit au final la réprésentation binaire de départ du int, mais dans un long. Sa valeur signée est alors 4026531840.


    Au final, l'opération

    ((long)entier) & 0xFFFFFFFFL a pour effet de promouvoir l'entier en long en le considérant comme non signé (préservation des bits de départ).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Fortran 77][Débutant] Comparaison bit à bit
    Par zenii dans le forum Fortran
    Réponses: 1
    Dernier message: 21/09/2007, 15h29
  2. Opérations bit à bit
    Par flo_k dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 28/10/2006, 15h36
  3. Operations bit à bit sur des structures
    Par DarkNagash dans le forum C
    Réponses: 4
    Dernier message: 16/03/2006, 13h59
  4. Entier : accès bit à bit
    Par slylafone dans le forum C++Builder
    Réponses: 16
    Dernier message: 14/06/2005, 20h34
  5. Réponses: 5
    Dernier message: 03/06/2005, 14h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo