LE BINAIRE POUR LES NULS (EXPLICATIONS ET EXEMPLES)

eax Messages postés 728 Date d'inscription jeudi 20 juin 2002 Statut Membre Dernière intervention 7 novembre 2007 - 25 sept. 2003 à 07:39
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008 - 1 oct. 2003 à 13:15
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/16662-le-binaire-pour-les-nuls-explications-et-exemples

cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
1 oct. 2003 à 13:15
Eh bin moà, je trouve celà normal et logique...

Le fait que les (et autres) soient non-associative justifie que le test "7 5" ait lieu avant toutes les autres operations associative quelles soient à gauche ou à droite...
Et c'est meme trés pratique quand tu as plusieur tests "&" ou "and" avec des sous-test "==", car si un soustest est faux alors les soustest suivant ne seront pô interprétés par le langage, d'où un gain de performances.

Za fait plusieurs année quon m'a appris çà et que je l'ai appliqué dans tout les langages que jai connus...
Et si certain langage permettent ta manip (je conteste pô, jai jamais essayé), c'est pô vraiment une bonne chose car çà nous met dans la confusion et rend les sources difficiles à porter...

Je te conseille vivement de prendre l'habitude de grouper tes tests associatif... Et cest une bonne chose que le PHP n'accepte pô ce péché d'usage ;op
cs_6Po Messages postés 105 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 22 janvier 2009
1 oct. 2003 à 12:42
Oauis c'est écrit dans la FAQ mais ce systeme n'a aucun sens...

En c, cobol ou meme en vb ca se fait pas comme ca :)

A voir je suis pas le seul a trouver ca louche :)

NOTE DEPUIS PHP.ORG FAQ
==================
28-Aug-2002 02:43
It should be noted that PHP's ?: operator associates left to right. In C and in C++, the ?: operator associates right to left. Thus:

1 ? 2 : 3 ? 4 : 5;

has the value 4 in PHP and the value 2 in C and in C++. I find it curious that they would reverse the associativity of an operator from its "accepted" sense, but yet they didn't fix the precedence of the bitwise operators. Thus:

if(A & 7 == 5)

groups like:

if(A & (7 == 5))

It is a trap for the unlucky.
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
30 sept. 2003 à 22:34
Mon commentaire se basait sur le "PHP 4.0 Manuel de Référence" traduction française de celle du "PHP Documentation Group" qui est distribué sur Nexen... Aurais-je mal compris les lignes ci-dessous ? :o|

7.7.3 Opérateurs sur les bits
Les opérateurs sur les bits vous permettent de manipuler les bits dans un entier.

$a & $b, ET (AND), Les bits positionnés à 1 dans $a ET dans $b sont
positionnés à 1.

...

7.7.4 Opérateurs de comparaison
Les opérateurs de comparaison, comme leur nom l'indique, vous permettent de comparer deux valeurs.

$a == $b,Egal, Vrai si $a est égal à $b.

...

7.7.8 Les opérateurs logiques
$a and $b, ET (And), Vrai si $a ET $b sont vrais.

La raison pour laquelle il existe deux types de "ET" et de "OU" est qu'ils ont des priorités différentes. Voir le paragraphe précédence d'opérateurs.

...

7.7.9 La précédence des opérateurs

ASSOCIATIVITé, OPERATEUR(S)
...
gauche, and
...
gauche, &
non−associative, == != ===


Et zà marche pô car ta syntaxe etait mauvaise :o|
cs_6Po Messages postés 105 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 22 janvier 2009
30 sept. 2003 à 21:43
Je confirme ca marche pas :)

T'as testé avant de posé ton message olid ? Moi aussi je peux dire plein de truc, bien sur que ca devrait etre effectuer avant mais ca marche pas en tout cas ca marche pas avec Easyphp 1.6.0.0 et php 4.2.0.0
cs_olid Messages postés 296 Date d'inscription lundi 2 septembre 2002 Statut Membre Dernière intervention 28 janvier 2008
30 sept. 2003 à 21:30
Au contraire, PHP reagit correctement par rapport aux conventions...

Les opérateurs de comparaison sont prioritaires sur les tests associatifs par bits

Quand tu fais "if (4 & 13 4)", c'est comme ci tu faisais "if (4 & (13 4))" qui est équivalent à "if (4 & 0)" !!!

:o|
cs_6Po Messages postés 105 Date d'inscription jeudi 16 mai 2002 Statut Membre Dernière intervention 22 janvier 2009
28 sept. 2003 à 19:45
Merci à tous, ca fait plaisir.

Je profite pour dire que j'ai trouvé le petit problème avec le test :)

Rappel selon ma source :
if (4 & 13 == 4)

pour contouner le problème il faut utlisé des variables.

$c = 4 & 13 ;
if ($c == 4)

Pour effectuer ce test sans variable intermédiaire il faut faire
if ((4 & 13) == 4)
il faut forcé le 4 & 13 avec des ( ), je comprends pas vraiment pourquoi PHP fait le test avant d'effecter l'opération... donc en la forcant de cette facon on résoud ce petit soucis.
LocalStone Messages postés 514 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 1 mars 2009
28 sept. 2003 à 17:44
Excellente idée. Et en plus, ça me rappelle mes cours de MPI. 9/10 !
defkrie Messages postés 435 Date d'inscription vendredi 20 septembre 2002 Statut Membre Dernière intervention 20 novembre 2004
26 sept. 2003 à 22:38
Bravo et merci pour ta contribution
ceacy Messages postés 27 Date d'inscription samedi 8 février 2003 Statut Membre Dernière intervention 4 août 2008
26 sept. 2003 à 19:24
Ouais ... ça va me faire de la lecture ;-)
eax Messages postés 728 Date d'inscription jeudi 20 juin 2002 Statut Membre Dernière intervention 7 novembre 2007 2
25 sept. 2003 à 07:39
ça a l'air sympa tout ça
Rejoignez-nous