fonction XOR [PHP] - Programmation
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 ^ ?
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 çà
00-->0
01-->0
10-->1
11-->1
comment je fais mouah...je me tape la fonction xor à la main???
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 ?
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 !
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 !
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...
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
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!
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 ...
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 (!).
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?
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
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...
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";
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 ...
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.....
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.
Marsh Posté le 20-08-2001 à 11:58:42
oki, fausse alerte
^ est bitwise http://www.php.net/manual/en/langu [...] itwise.php
xor est logique http://www.php.net/manual/en/langu [...] ogical.php
Marsh Posté le 20-08-2001 à 12:01:34
youdontcare a écrit a écrit : oki, fausse alerte ^ 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!
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)
Marsh Posté le 20-08-2001 à 12:16:49
arf..........
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