Besoin d'aide en java

Fermé
Kwarm Messages postés 4 Date d'inscription jeudi 1 septembre 2011 Statut Membre Dernière intervention 6 septembre 2011 - 1 sept. 2011 à 10:07
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 1 sept. 2011 à 13:02
Bonjour,
je débute en java, et j'aurais plusieurs questions à vous poser :) :
-je suis tombé sur ca <<< ou ca >>, ou | tenez un exemple de code que j'aimerais bien comprendre:
int i = (sArr[s++] & 0xff) << 16 | (sArr[s++] & 0xff) << 8 | (sArr[s++] & 0xff);
il n y a pas un site qui répertorie tout ce genre de structures spéciales ??
-que veut dire le f de par exemple :
double double= 12.20f
je ne l'ai jamais croisé celui-là, j'ai même demandé aux membres de mon entourage qui sont plus expérimenté en maths
-enfin, étant un débutant, je cherche un tuto sur la classe File() et toutes ses classes filles ... merci pour l'aide !!! et à bientôt ;) je suis déterminé à comprendre ce code compliqué :)


A voir également:

3 réponses

poukkid Messages postés 106 Date d'inscription mercredi 20 mai 2009 Statut Membre Dernière intervention 11 avril 2012 11
1 sept. 2011 à 11:36
Salut,

Hmm si tu est débutant, je te conseille de ne pas trop t'attarder sur ce code qui est assez compliqué et rentre dans le langage binaire de tes données, malgré tout si tu veux perséverer tu vas avoir du travail mais c'est très enrichissant et intéressant...

Le & est un "ET" logique et par exemple le fait de faire & 0xff (qui correspond à "11111111" va appliquer ce masque sur les huit premiers bits de poids faible de ta variable sArr[s++].

le | est un "OU" logique

le << ou >> permettent de décaler les bits dans un sens ou dans l'autre...
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 018
Modifié par KX le 1/09/2011 à 13:02
À noter que >> insère le bit de signe à gauche, contrairement à >>> qui insère toujours 0
On peut aussi trouver ~ et ^ (voir la liste des opérateurs)

Pour ta troisème question regarde La gestion des fichiers et des flux de données.
0
Kwarm Messages postés 4 Date d'inscription jeudi 1 septembre 2011 Statut Membre Dernière intervention 6 septembre 2011
1 sept. 2011 à 12:04
j'étais sur que c'était plutôt le || qui était un ou logique, alors j'ai fais une recherche , et je suis tombé sur un article de ce même site qui explique à peu près, (le | est un ou inclusif) j'ai de la la lecture ;)

par contre, ce que je ne comprend toujours pas, c'est les f qu'on retrouve dans les float/double, et ce 0xff que je ne comprend toujours pas --"
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 018
Modifié par KX le 1/09/2011 à 12:45
Pour les entiers c'est une notation hexadécimale, FF (base 16) = 11111111 (base 2) = 255 (base 10)
Pour les flottants cela indique que c'est une valeur float (double par défaut)

Exemples :
System.out.println(0xFF);  // 255 en base 16 (grâce au préfixe 0x)
System.out.println(0377);  // 255 en base  8 (grâce au préfixe 0 )
System.out.println(255);   // 255 en base 10 (par défaut)

float f1 = 0.0;		// incorrect (0.0 est un double par défaut) 
float f2 = 0.0f;	//   correct
float f3 = (float) 0.0;	//   correct

Remarque : mettre un f pour un double (double x = 12.20f) entraîne une perte de précision vu que l'on convertit d'abord la valeur en float avant de le passer en double.
Il serait mieux de mettre alors un d (double x = 12.20d) ou de ne rien mettre (double x = 12.20)
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 018
1 sept. 2011 à 13:02
Voici un petit code qui devrait te permettre de voir comment se comportent les différentes notations pour les nombres :

static void afficher(int i)    { System.out.println("int\t"+i);    }
static void afficher(long l)   { System.out.println("long\t"+l);   }
static void afficher(float f)  { System.out.println("float\t"+f);  }
static void afficher(double d) { System.out.println("double\t"+d); }

public static void main(String...args)
{
    afficher(010);  // int	8
    afficher(0x10); // int	16
    afficher(10);   // int	10
    afficher(10L);  // long	10
    afficher(10F);  // float	10.0
    afficher(10D);  // double	10.0
    afficher(10.0); // double	10.0
}
0