Java(script) - Opérateur Xor (^)

Fermé
charpentier3 Messages postés 34 Date d'inscription samedi 25 décembre 2010 Statut Membre Dernière intervention 9 mars 2012 - 26 févr. 2012 à 17:29
charpentier3 Messages postés 34 Date d'inscription samedi 25 décembre 2010 Statut Membre Dernière intervention 9 mars 2012 - 27 févr. 2012 à 20:32
Bonjour,

J'ai un petit problème, je ne sais pas très bien comment l'opérateur Xor Java fonctionne. Si on fait ceci par exemple : un char c^0x7c Sur Javascript :

t="c";
z=0x7c;
e=t^z;
document.write("e = "+e);
==> Affichage : 124

Je sais que 124 est la valeur décimale du caractère " | " (en hexadécimal : 7C)

Mes questions sont les suivantes :

- Comment cet opérateur arrive-t-il à ce résultat ?
- Comment obtenir le caractère ("char") correspondant à la réponse ?

En vous remerciant à l'avance ! : )

A voir également:

6 réponses

Bonjour

1 - Pour calculer t^z, javascript commence par traduire t en nombre (car ce n'en est pas un au départ). Et comme "c" n'est pas un nombre, il trouve 0. Et comme zéro ou exclusif quelque chose = ce même quelque chose, il retrouve e=0x7c.
Essaye en modifiant t="0xc", comme 0xc est un nombre, cette fois le résultat sera différent (0xc ^ 0x7c = 0x70 =112)

2 - Pour afficher le caractère correspondant au résultat, utilise la méthode (statique) de l'objet String de javascript:
document.write("e = "+e + " " + String.fromCharCode(e));

voir http://www.w3schools.com/jsref/jsref_fromcharcode.asp
0
charpentier3 Messages postés 34 Date d'inscription samedi 25 décembre 2010 Statut Membre Dernière intervention 9 mars 2012
26 févr. 2012 à 20:14
Cela donnerait-il le même résultat si l'on définissait une chaîne de caractère String en Java ?

Exemple :

Une chaîne string chaine="chaine";
Avec, par exemple, une boucle de concaténation (à priori) :

for(i=0;i<chaine.lenght;i++)
{
une new string chaine2;
et une expression : chaine2=(char)(chaine.charAt(i)^0x7c).toString();
}


On aurait alors chaque fois une série de "124" qui se suivent ?
0
Pas la moindre idée. Je ne connais rien du tout au java, qui n'a (faut-il le rappeler ?) strictement aucun rapport avec javascript.
Je doute quand même que length s'écrive lenght en java.

J'avais répondu à ton premier message en pensant uniquement à javascript, je n'avais pas lu assez attentivement pour remarquer que tu parlais des deux.
0
charpentier3 Messages postés 34 Date d'inscription samedi 25 décembre 2010 Statut Membre Dernière intervention 9 mars 2012
27 févr. 2012 à 14:31
Ça s'écrit effectivement length, c'est une erreur de ma part. Mon premier message concernait effectivement Javascript, mais je vous remercie pour votre aide, cela m'a permis d'avancer.

Bonne journée : )

Si quelqu'un d'autre pouvait m'aider pour le Java, ce serait sympa : )
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
27 févr. 2012 à 15:45
Pourquoi demander comment ça ferait en Java, alors qu'il suffit de tester pour le savoir ?

Contrairement au Javascript, le langage Java a un typage fort, on ne peut donc pas mélanger caractères, entiers et chaînes de caractères n'importe comment !
Du coup les effets de bord du genre «comme "c" n'est pas un nombre, il trouve 0», ne sont pas reproductibles, car Java imposera que 'c' soit un caractère, qu'il pourra le convertir en entier, et qui ne vaudra donc pas toujours 0...

Mais je le répète, il suffisait de tester pour s'en rendre compte !

public static void main(String...args)
{
	String chaine = "Hello World !";
	
	int z = 0x7c;
	
	for (char t : chaine.toCharArray())
	{
		int e = t ^ z;
		
		System.out.printf("%d\t%c\n",e,e);
	}
}
0
charpentier3 Messages postés 34 Date d'inscription samedi 25 décembre 2010 Statut Membre Dernière intervention 9 mars 2012
27 févr. 2012 à 18:05
Donc, si je comprend bien, le premier caractère de la chaîne "Hello World !", le "H" sera converti en entier décimal 72 par exemple. Et le résultat de l'opérateur de comparaison pour ce premier caractère serait alors :

01001000 H
^01111100 (0x7C)
_________
00110100 le caractère 4 ?

Mais quel logiciel peut-on utiliser pour taper du code Java et le tester ?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 27/02/2012 à 18:23
Oui, c'est ça, tu obtiendras '4'.

Pour taper du code Java, il te suffit d'un bloc-notes (on peut aussi utiliser un IDE)
Par contre il te faut la JDK derrière pour pouvoir compiler le code, avant de l'exécuter.
0
charpentier3 Messages postés 34 Date d'inscription samedi 25 décembre 2010 Statut Membre Dernière intervention 9 mars 2012
27 févr. 2012 à 20:32
OK, un grand merci ! : )
0