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 :

Opérateurs multiplication/division binaire Java


Sujet :

Langage Java

  1. #1
    Membre expert

    Avatar de Songbird
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2015
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 493
    Points : 3 872
    Points
    3 872
    Billets dans le blog
    8
    Par défaut Opérateurs multiplication/division binaire Java
    Bonjour,

    Je souhaiterais multiplier et diviser des entiers par leur équivalent binaire.

    Rien de plus simple quand le diviseur est une puissance de 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    10 >> 3 == 1 | 1010/1000 == 0001
    Mais maintenant admettons que le diviseur n'est pas une puissance de 2, du style 9.

    Comment suis-je censé faire, sachant que cet opérateur ne permet que le décalage des bits déjà présents, mais pas d'en rajouter par la suite ? (1001)

    Je vous remercie d'avance pour votre réponse,

    Cordialement,

    Songbird.
    Avant de poster: FAQ Rust; FAQ Dart; FAQ Java; FAQ JavaFX.
    Vous souhaiteriez vous introduire au langage Rust ? C'est par ici ou ici !
    Une question à propos du langage ? N'hésitez pas à vous rendre sur le forum !


    Pour contribuer à la rubrique, vous pouvez me contacter par MP (Sorry, we're closed!) ou contacter directement la rédaction.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Pas compris. C'est quoi la finalité de la chose ?

    Qu'est-ce qui justifie de ne pas faire une division parfaitement normale ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    La notion de binaire est une notion de représentation et la notion d'entier de type, donc d'ensemble de valeurs : il n'y a donc pas à tortiller n / m, que m, ou n, soit représenté en binaire, en octal, en sexagésimal, en chiffres romains ou mayas, ou en dada ourka, c'est n / m.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println( (1310 / 131) + "=" + (1310 / 0b10000011) );
    Idem pour la multiplication.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre expert

    Avatar de Songbird
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2015
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 493
    Points : 3 872
    Points
    3 872
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Pas compris. C'est quoi la finalité de la chose ?

    Qu'est-ce qui justifie de ne pas faire une division parfaitement normale ?
    Rien. Je pose juste une question pour connaître une 'autre' façon de diviser. ^^


    Salut,

    La notion de binaire est une notion de représentation et la notion d'entier de type, donc d'ensemble de valeurs : il n'y a donc pas à tortiller n / m, que m, ou n, soit représenté en binaire, en octal, en sexagésimal, en chiffres romains ou mayas, ou en dada ourka, c'est n / m.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part

    System.out.println( (1310 / 131) + "=" + (1310 / 0b10000011) );

    Idem pour la multiplication.
    Sauf que là, je ne parle pas de la division basique.

    Je parle bien de cet opérateur '>>' qui prend en premier paramètre le nombre à diviser et ensuite le nombre de fois qu'on décale les bits du nombre.

    Dans mon premier exemple 3 = 2^3 = 8.

    Ma question est donc la suivante: Comment effectuer une division de ce genre avec un nombre qui n'est pas une puissance de 2 ? (9, pas exemple)

    Si ma question est trop farfelue, c'est pas grave, ce n'est que de la curiosité.
    Avant de poster: FAQ Rust; FAQ Dart; FAQ Java; FAQ JavaFX.
    Vous souhaiteriez vous introduire au langage Rust ? C'est par ici ou ici !
    Une question à propos du langage ? N'hésitez pas à vous rendre sur le forum !


    Pour contribuer à la rubrique, vous pouvez me contacter par MP (Sorry, we're closed!) ou contacter directement la rédaction.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ma foi, tu peux commencer par réécrire le nombre sous une autre base, dont le diviseur est une puissance. Par exemple pour 9, c'est une puissance de 3, donc tu pourrais réécrire le nombre à diviser en base 3.
    Ensuite, déterminer quelle puissance de la base est ton diviseur. Pour 9, c'est 3 puissance 2. Ce qui veut dire un décalage de deux chiffres en base 3.
    Enfin, faire ce décalage en enlevant des chiffres à droite.

    Évidemment, il est difficile d'imaginer plus inefficace.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre expert

    Avatar de Songbird
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2015
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 493
    Points : 3 872
    Points
    3 872
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Ma foi, tu peux commencer par réécrire le nombre sous une autre base, dont le diviseur est une puissance. Par exemple pour 9, c'est une puissance de 3, donc tu pourrais réécrire le nombre à diviser en base 3.
    Ensuite, déterminer quelle puissance de la base est ton diviseur. Pour 9, c'est 3 puissance 2. Ce qui veut dire un décalage de deux chiffres en base 3.
    Enfin, faire ce décalage en enlevant des chiffres à droite.

    Évidemment, il est difficile d'imaginer plus inefficace.
    D'accord, merci.
    Oui donc ce genre d'opérations n'est bon que pour les entiers, et à condition que ces derniers soient des multiples de 2.

    J'ai lu que ces opérations étaient plus rapides qu'une division normale, mais ne pouvant être utilisées dans si peu de cas elles en deviennent presque inutiles, visiblement.


    Merci pour vos réponses !
    Avant de poster: FAQ Rust; FAQ Dart; FAQ Java; FAQ JavaFX.
    Vous souhaiteriez vous introduire au langage Rust ? C'est par ici ou ici !
    Une question à propos du langage ? N'hésitez pas à vous rendre sur le forum !


    Pour contribuer à la rubrique, vous pouvez me contacter par MP (Sorry, we're closed!) ou contacter directement la rédaction.

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

Discussions similaires

  1. ordre multiplication division
    Par lasrevinu dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/05/2010, 20h13
  2. Opérateur Anti-division " \ " (backslash)
    Par Salendar dans le forum MATLAB
    Réponses: 9
    Dernier message: 12/05/2009, 11h58
  3. Package listings et opérateur multiplication *
    Par jguillot dans le forum Mise en forme
    Réponses: 2
    Dernier message: 27/06/2007, 09h51
  4. opérateur de division pour retour du résultat sous forme entière
    Par maroco31 informatik dans le forum Langage
    Réponses: 2
    Dernier message: 31/05/2007, 16h18
  5. [langage] opérateur d'affectation binaires
    Par biglebowski13 dans le forum Langage
    Réponses: 6
    Dernier message: 21/11/2006, 09h51

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