[PHP]fonction XOR

fonction XOR [PHP] - Programmation

Marsh Posté le 19-08-2001 à 04:24:20    

ca marche comment???
parce ke en faisant a xor b il me sort tout le temps a...
il a fumé apache????


---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
Reply

Marsh Posté le 19-08-2001 à 04:24:20   

Reply

Marsh Posté le 19-08-2001 à 12:55:18    

bin ca dépend évidemment de ta valeur b, (a xor 0) = a !
es-tu sûr de sa valeur au moment du ^ ?
 
:)


---------------
"L'imagination est plus importante que la connaissance" - A. E.
Reply

Marsh Posté le 19-08-2001 à 13:47:04    

j ai essayé tout connement de vérifier la table de vérité du xor ben ca marche pô :(  
me fôdré çà
00-->0
01-->1
10-->1
11-->0
 
il me donne çà  :ouch:  
00-->0
01-->0
10-->1
11-->1
 
comment je fais mouah...je me tape la fonction xor à la main???


---------------
XBL : ESN3S | GGPO (3rd strike) : ESN | PSN : Huitxilopochti
Reply

Marsh Posté le 19-08-2001 à 15:06:22    

étonnant !
 
ta table correspond à :
     x & (!y | y)
  => x
 
alors que le XOR : (x & !y) | (!x & y)
 
t sûr de ta vérif, il ne s'agirait pô d'un pb de priorité, de parenthèse ?
 
:)


---------------
"L'imagination est plus importante que la connaissance" - A. E.
Reply

Marsh Posté le 19-08-2001 à 17:03:30    

Si mes souvenirs sont bons ...  
 
a xor b; php renvoie false si a = b et true si a ou b enfin je crois...
En francais a ou b mais pas a et b !

Reply

Marsh Posté le 19-08-2001 à 17:05:43    

le xor c un OU exclusif !
donc ni ou ni et mais un mélange des 2 !


---------------
"L'imagination est plus importante que la connaissance" - A. E.
Reply

Marsh Posté le 20-08-2001 à 10:15:50    

y a pas de problême de priorité puiske j ai fais les tests sur deux valeurs toutes simples...0 et 1...
 
et il fait n importe koi...enfin non, mais pas ce k il devré faire...
 
donc je suis obligé de créer une fonction xor... :(

Reply

Marsh Posté le 20-08-2001 à 10:17:45    

NicolasP a écrit a écrit :

Si mes souvenirs sont bons ...  
 
a xor b; php renvoie false si a = b et true si a ou b enfin je crois...
En francais a ou b mais pas a et b !  




ca voudré dire k il trvaille k en logike pure...
donc il ne calcule pas par exemple la valeur de (1011)xor(1000)  :??:  
même la calculatrice de zindôws sait le faire :pt1cable:

Reply

Marsh Posté le 20-08-2001 à 10:19:51    

En_Sabah_Nur a écrit a écrit :

y a pas de problême de priorité puiske j ai fais les tests sur deux valeurs toutes simples...0 et 1...
 
et il fait n importe koi...enfin non, mais pas ce k il devré faire...
 
donc je suis obligé de créer une fonction xor... :(  




 
 
C'est donc toi qui a pris le pseudo que je convoitais!

Reply

Marsh Posté le 20-08-2001 à 10:38:47    

En_Sabah_Nur a écrit a écrit :

y a pas de problême de priorité puiske j ai fais les tests sur deux valeurs toutes simples...0 et 1...
 
et il fait n importe koi...enfin non, mais pas ce k il devré faire...
 
donc je suis obligé de créer une fonction xor... :(


montre ton code (au point virgule près). c'est vraiment suspect ...

Reply

Marsh Posté le 20-08-2001 à 10:38:47   

Reply

Marsh Posté le 20-08-2001 à 10:42:02    

tiens histoire de te rassurer, le bout de source 'incriminé' :  
 
ZEND_API int bitwise_xor_function(zval *result, zval *op1, zval *op2)
{
 zval op1_copy, op2_copy;
 
 if (op1->type == IS_STRING && op2->type == IS_STRING) {
  zval *longer, *shorter;
  char *result_str;
  int i, result_len;
 
  if (op1->value.str.len >= op2->value.str.len) {
   longer = op1;
   shorter = op2;
  } else {
   longer = op2;
   shorter = op1;
  }
 
  result->type = IS_STRING;
  result_len = shorter->value.str.len;
  result_str = estrndup(shorter->value.str.val, shorter->value.str.len);
  for (i = 0; i < shorter->value.str.len; i++) {
   result_str[i] ^= longer->value.str.val[i];
  }
  if (result==op1) {
   efree(result->value.str.val);
  }
  result->value.str.val = result_str;
  result->value.str.len = result_len;
  return SUCCESS;
 }
 
 zendi_convert_to_long(op1, op1_copy, result);
 zendi_convert_to_long(op2, op2_copy, result);  
 
 result->type = IS_LONG;
result->value.lval = op1->value.lval ^ op2->value.lval; return SUCCESS;
}
 
comme tu peux le voir, tout va bien. cherche une vraie solution au problème plutôt que de te faire une fonction custom (!).

Reply

Marsh Posté le 20-08-2001 à 11:15:54    

nur a écrit a écrit :

 
 
 
C'est donc toi qui a pris le pseudo que je convoitais!  




ahah j en été sur en plus...j té vu sur blabla ce matin!
ben désolé ;)  
fan des x-men donc?

Reply

Marsh Posté le 20-08-2001 à 11:23:07    

youdontcare a écrit a écrit :

 montre ton code (au point virgule près). c'est vraiment suspect ...  




j ai pas le code sous la main...mais c vraiment tout con :crazy:  
ca doit être un truc du genre
$r=0 xor 1;
 
et ca sur l ensemble de la table de vérité du xor...
donc je vois pas trop d erreur possible...

Reply

Marsh Posté le 20-08-2001 à 11:27:30    

essaye plutôt $r = 0 ^ 1;

Reply

Marsh Posté le 20-08-2001 à 11:33:10    

en tout cas j'ai testé et il m'a sorti les bonnes valeurs...
 
$a = 1;
$b = 0;
 
$c = $a ^ $b;
$d = $a Xor $b;
 
echo "$c-$d";


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 20-08-2001 à 11:40:32    

sh@rdar > teste avec toutes les combinaisons : 0 xor 0, 0 xor 1, 1 xor 0, 1 xor 1 ... qui devrait donc sortir 0 1 1 0.
 
avec ^, j'obtiens les bonnes valeurs
avec xor ou Xor, j'obtiens à chaque fois 0 0 1 1. ce qui est franchement ETRANGE et conforme à ton résultat, d'ailleurs.
 
je ne connaissais pas le xor sous forme 'xor', j'ai cherché dans les sources sans rien trouver ... :??:

Reply

Marsh Posté le 20-08-2001 à 11:43:27    

j'ai testé toutes les valeurs et elles sont identiques (et correctes) pour le ^ comme pour le XOR....
 
php 3.0.14.. vais tester sous php4 y a peut être un bug.....


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 20-08-2001 à 11:47:53    

et beh PUTAING !  
 
php 3.0.16
php 4.0.4pl1
php 4.0.5rc1
 
les trois buggent.

Reply

Marsh Posté le 20-08-2001 à 11:58:42    

Reply

Marsh Posté le 20-08-2001 à 12:01:34    

youdontcare a écrit a écrit :

oki, fausse alerte :D
 
^ est bitwise http://www.php.net/manual/en/langu [...] itwise.php
 
xor est logique http://www.php.net/manual/en/langu [...] ogical.php  




YAISSSSSSS
CQFD!!
donc fô utiliser le ^
merci à tous! :hello:

Reply

Marsh Posté le 20-08-2001 à 12:01:42    

dernière note, les opérateurs logiques ont une priorité inférieure aux opérateurs bitwise.
 
donc  
 $r = $a xor $b  
ne marchera pas. il faut utiliser
 $r = ($a xor $b)

Reply

Marsh Posté le 20-08-2001 à 12:16:49    

arf..........


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed