OVH Cloud OVH Cloud

short k + 1 ??

9 réponses
Avatar
Dominique.Micollet
Question philosophique N°3

short k =0;
k = k + 1 ;

javac rale en me signalant une possibilité de débordement et me disant
que + est int.
N'y aurait il pas d'opérateur + pour les shorts ?
Bizarre car k+=1 est accepté sans encombre.

Vous en pensez quoi ?
--
Cordialement

Dominique MICOLLET Email : enlevez le .fr.fr
Universite de Bourgogne
9, Avenue Alain SAVARY BP 47870 Tel : +33/(0)3-80-39-59-27
21078 DIJON CEDEX FRANCE Tfx : +33/(0)3-80-39-68-69

9 réponses

Avatar
alexandre cartapanis
Question philosophique N°3

short k =0;
k = k + 1 ;

javac rale en me signalant une possibilité de débordement et me disant
que + est int.
N'y aurait il pas d'opérateur + pour les shorts ?
Bizarre car k+=1 est accepté sans encombre.

Vous en pensez quoi ?


Je crois que ce n'est pas '+' qui est int, mais '1'.

Avatar
alexandre cartapanis

Question philosophique N°3

short k =0;
k = k + 1 ;

javac rale en me signalant une possibilité de débordement et me disant
que + est int.
N'y aurait il pas d'opérateur + pour les shorts ?
Bizarre car k+=1 est accepté sans encombre.

Vous en pensez quoi ?



Je crois que ce n'est pas '+' qui est int, mais '1'.


Bon j'ai parlé trop vite...
Effectivement, k = k + 1; ne marche pas, pas plus que k = k + (short)1;.
C'est tres tres etrange ca tiens, je vais chercher encore.
A noter que k = (short)(k + 1); marche, mais cela veut dire que le
compilo/interpreteur transforme k en int, fais la somme, et convertis la
somme en short. C'est plutot long...


Avatar
Rene Mouchot


Question philosophique N°3

short k =0;
k = k + 1 ;

javac rale en me signalant une possibilité de débordement et me dis ant
que + est int.
N'y aurait il pas d'opérateur + pour les shorts ?
Bizarre car k+=1 est accepté sans encombre.

Vous en pensez quoi ?



Je crois que ce n'est pas '+' qui est int, mais '1'.


Bon j'ai parlé trop vite...
Effectivement, k = k + 1; ne marche pas, pas plus que k = k + (short) 1;.
C'est tres tres etrange ca tiens, je vais chercher encore.
A noter que k = (short)(k + 1); marche, mais cela veut dire que le
compilo/interpreteur transforme k en int, fais la somme, et convertis la
somme en short. C'est plutot long...


C'est en effet comme cela. Il me semble qu'il n'y a pas d'instruction
JVM pour aditionner 2 short. Je ne sais pas le pourquoi de la chose par
contre, s'il y a un expert dans les parages...

--
Rene Mouchot



Avatar
Kupee
wrote:
Question philosophique N°3

short k =0;
k = k + 1 ;

javac rale en me signalant une possibilité de débordement et me disant
que + est int.
N'y aurait il pas d'opérateur + pour les shorts ?
Bizarre car k+=1 est accepté sans encombre.

Vous en pensez quoi ?


Je dirais que c'est du a la promotion numérique
http://www.laltruiste.com/document.php?url=http://www.laltruiste.com/coursjava/promotion_numerique.html
Le type par défaut est int en java codé sur 32 bits

A noter un truc amusant sur les types primitifs : un boolean prendra
autant d'espace mémoire qu'un byte, c'est a dire 8 bits
Ca se vérifie facilement avec une méthode de ce genre
public static void main(String[] args)
throws InterruptedException
{


Thread.sleep(3000);
byte[] in = new byte[5000000];
Thread.sleep(3000);
System.out.println(in);
}
en regardant l'occupation mémoire. suffit de changer le type de donnée
du tableau pour le constater

Avatar
Olivier Thomann
Le type par défaut est int en java codé sur 32 bits
Normal, false = iconst_0 et true = iconst_1. Donc d'un point de vue VM,

boolean = int.
--
Olivier

Avatar
Kupee
Olivier Thomann wrote:

Le type par défaut est int en java codé sur 32 bits


Normal, false = iconst_0 et true = iconst_1. Donc d'un point de vue VM,
boolean = int.


Ah ba non boolean = pas int, le boolean ne prend que 8 bits pas 32.


Avatar
Olivier Thomann
Ah ba non boolean = pas int, le boolean ne prend que 8 bits pas 32.
Tu as vu ça où?

Tous les types sont 32 bits sauf les doubles et les longs qui sont 64bits.
Comment d'après toi est représenté un boolean pour la VM?
--
Olivier

Avatar
Kupee
Olivier Thomann wrote:

Ah ba non boolean = pas int, le boolean ne prend que 8 bits pas 32.


Tu as vu ça où?
Tous les types sont 32 bits sauf les doubles et les longs qui sont 64bits.
Comment d'après toi est représenté un boolean pour la VM?


Ben simple mesure de l'occupation mémoire
regarde l'occupation mémoire avec ca
public static void main(String[] args)
throws InterruptedException
{


Thread.sleep(3000);
boolean[] in = new boolean[5000000];
Thread.sleep(3000);
System.out.println(in);
}

public static void main(String[] args)
throws InterruptedException
{


Thread.sleep(3000);
byte[] in = new byte[5000000];
Thread.sleep(3000);
System.out.println(in);
}

public static void main(String[] args)
throws InterruptedException
{


Thread.sleep(3000);
int[] in = new int[5000000];
Thread.sleep(3000);
System.out.println(in);
}

Tu verras que les 2 premiers ont une occupation mémoire proche et le 3
eme bien plus élevée


Avatar
obere
Salut,

La taille de stockage des boolean est laisse libre par les specs a
l'implementeur de la JVM.

Pour ce qui est de l'addition des short, k + 1 est effectivement
transforme en int et doit etre recaste en short si tu ne veux pas
d'erreur. Il y a tout un chapitre sur ce sujet dans la certification
Java Programmer de Sun, mais je me rapelle plus du pourquoi du comment,
je l'ai passe il ya trop longtemps.

a+