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 :

Promotion en "long"


Sujet :

Langage Java

  1. #1
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut Promotion en "long"
    Salut!

    En java, lors d'opération sur les types "byte","short" et "char" le résultat est converti en "int" pour éviter les débordements.
    Pourquoi n'est-ce pas le cas avec les opérations entre "int" qui risque de déborder, pourquoi pas une promotion en "long"?
    De même le résultat d'opérations entre "float" n'est pas promu en "double".

    Merci de vos explications.

  2. #2
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    La conversion en "int" n'est pas forcément pour éviter le débordement...

    C'est juste que "int" est le type par défaut pour les entiers, et je pense que byte + byte fait "int" car tous les processeurs sont au moins à 32 bits... (je suppose que le choix a été fait pour cela)
    Par contre, float + float ça fait float, et pas double... Car float c'est 32 bits...

    C'est une hypothèse...

    Convertir les int en long multiplie par plus de 2 la manipulation sur un 32 bits...

    EDIT: D'ailleurs, j'étais persuadé que java renvoyait une exception lors d'un débordement... En fait, non...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int k = Integer.MAX_VALUE + 1; // ça donne -2147483648

  3. #3
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    OK alors c'est juste une question d'optimisation pour les calculs au niveau du processeur.

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

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