begin process at 2012 05 31 12:19:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Aide & documentation

 > 

probleme binaire en php


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme binaire en php

mardi 15 juin 2010 à 19:18:05 | probleme binaire en php

jarodjarod

bonsoir à tous,

Je vous prie de m'aider dans ce code mes amis :

Introduction
$dataBin est un tableau qui contient une chaine binaire,
$r contient la chaine binaire de la composante R du RGB

Code :
$i=0;
if ($dataBin[$i]=="1") // si le bit traité est égale à 1 alors faire
$r|=0x01;
else if ($r%2==1)
$r-=1;
$i++;

Alors mon problème, je comprend pas ce que l'instruction $r|=0x01; : puisque elle contient le "|" qui est le ou logique, je sais que ca veut dire : $r = $r | 0x01 mais qu'est ce que ca serai résultat....


Aidez moi mes amis SVP, et ne m'envoyez pas à Wikipedia pour lire l'explication de ou logique, je l'ai deja fait, je cherche à le comprendre ici

Merci
mardi 15 juin 2010 à 20:47:26 | Re : probleme binaire en php

kohntark

Membre Club
Réponse acceptée !
Salut,

Tu vas à l'essentiel dans ton message, et c'est très bien, mais du coup j'ai presque envie de te dire d'aller voir Wikipedia, parce que je ne comprends pas ... ce que tu ne comprends pas.

Avec un exemple peut être ...

Code PHP :
<?php
$dataBin = array(1,0);
$r = 3;

$i=0;
for($y = 0; $y < 2; $y++) {

    if ($dataBin[$i]=="1") { // si le bit traité est égale à 1 alors faire
        /*
         *
         * $r|=0x01 est égal à $r = $r | 0x01
         *
         * (hexa)0x01 == (bin)1 == masque sur le premier bit
         *
         * (dec)3 = (bin)11
         *
         * $r = 11 OR 1 == (bin)11 == (dec)3 
         *
         * Si $r valait 250 :
         * (dec)250 == (bin)11111010
         * 
         * $r = 11111010 | 1 == 11111011 == (dec)251
         *
        */

        $r|=0x01;
        
    } else if ($r%2==1) {
        /*
         * si le modulo de $r donne 1 on décrémente 1 fois $r
         * (cas pour $dataBin[1])
         */
        $r-=1;
    }
    $i++;
}
?>


Je ne suis pas sur de t'être d'une grande aide. Si c'est le cas précise un peu plus ton incompréhension (notamment ce que valent $r et $databin)

Cordialement,

Kohntark -

mardi 15 juin 2010 à 22:04:16 | Re : probleme binaire en php

jarodjarod

salut Kohntarl,

Merci beaucoup pour ta précieuse réponse, tu m'a vraiment éclaircis mon flou,
en fait, t'avais raison moi même je n'était pas claire, maintenant je comprend mieux mon problème :

1) Ne m'en veut pas : le masque sur le premier bit, c'est ca l'application du "ou" ?
2) $r|=0x01 veut dire donc application d'un masque sur le premier bit ??
3) et l'application d'un masque, comment ca se fait
4) je vois que :
$r = 11111010 | 1 == 11111011 == (dec)251
le bit de poids faible est changé par 1, donc le masque est traduit par le changement du premier bit par le bit du deuxième opérande ???


Je m'excuse mon Kohntarl, je sais que ca à l'aire tres bete, (de ne pas connaitre un masque ou son application), mais c'est la vérité, enfin
J'espere avoir une réponse favorable.

Je comprend enfin que mon probleme c'est le masque,

et si je change 0x01 par 0x02, ca veut dire : appliquer le masque sur les deux premiers bits (les deux bits de poids faible)???




Merci beaucoup mon ami.
Sincèrement, Jarod.
mercredi 16 juin 2010 à 00:03:11 | Re : probleme binaire en php

kohntark

Membre Club
Réponse acceptée !

1) Ne m'en veut pas : le masque sur le premier bit, c'est ca l'application du "ou" ?


Tu fais ce que tu veux avec ces fonctions binaires, pas forcément un masque ...

2) $r|=0x01 veut dire donc application d'un masque sur le premier bit ??


Je parlais de masque car ça pourrait être le cas, mais n'ayant pas tout le code il est difficile de savoir à quoi il sert réellement. Il s'agit peut être d'autre chose.

3) et l'application d'un masque, comment ca se fait


Un masque sert à retirer un ou plusieurs bits, ou ne pas tenir compte de certains d'entre eux.

Prenons l'exemple basique d'un forum :
Le but est d'autoriser certaines fonctionnalités en fonction des droits attribués.
On code sur 4 bits :

bit 0 => visualiser un message
bit 1 => écrire un message
bit 2 => supprimer un message
bit 3 => éditer un message

Admettons les utilisateur suivants :
Machin est visiteur => (dec)1 == (bin)0001 == uniquement visualiser (bit 0)
Truc est membre => (dec)3 == (bin)0011 == visualiser et écrire (bits 0 et 1)
Bidule est modérateur => (dec)7 == (bin)0111 == visu, écriture et suppression
Boss est administrateur => (dec)15 == (bin)1111 == tous les droits

On veut afficher un lien "supprimer le message" si l'utilisateur a ce droit.
Le bit "supprimer un message" est le troisième, donc (hexa)0x4 ((bin) 0100)

if ([droits de l'utilisateur] & 0x4) echo '<a href="supprimerMessage.html">supprimer le message</a>';

Ce qui donne :
Machin :
0001 & 0100 == false (pas d'affichage du lien)
Truc :
0011 & 0100 == false
Bidule :
0111 & 0100 == true (affichage du lien)
Boos :
1111 & 0100 == true

On utilise ici la fonction "et" qui est plus adaptée et qui correspond plus à la terminologie de masque, mais un "masque" peut utiliser n'importe quoi (AND, OR, XOR) tout dépend de ce que l'on souhaite faire.
Dans ton code le $r|=0x01; permet de positionner le bit de poids le plus faible à 1 quelque soit sa valeur.

4) je vois que :
$r = 11111010 | 1 == 11111011 == (dec)251
le bit de poids faible est changé par 1, donc le masque est traduit par le changement du premier bit par le bit du deuxième opérande ???


Le bit de poids le plus faible est toujours égal à 1, qu'il soit à 0 ou à 1

et si je change 0x01 par 0x02, ca veut dire : appliquer le masque sur les deux premiers bits (les deux bits de poids faible)???


Non, tu es en hexa là, donc :
(hex)0x01 (ou 0x1) == (bin)0001 (applique le "ou" sur le premier bit)
(hex)0x2 == (bin)0010 (applique le "ou" sur le second bit)

0001 | 0x1 = 0001 == (dec)1
0001 | 0x2 = 0011 == (dec)3

0010 | 0x1 = 0011 == (dec)3
0010 | 0x2 = 0010 == (dec)2

Pour appliquer le "ou" sur les deux premiers bits il faudrait faire :
0011 (les 2 premiers) == (dec)3 == (hex)0x3
0001 | 0x3 = 0011 == (dec)3
0010 | 0x3 = 0011
((dec)255) 11111111 | 0x3 = 11111111 == (dec)255
((dec)250) 11111010 | 0x3 = 11111011 == (dec)251

Si tu as des difficultés avec le traitement binaire tu peux peut être faire une recherche sur "table de vérité binaire". Je n'ai pas regardé mais je pense que ça donnera de meilleurs résultats que Wikipedia pour l'aspect didactique.

J'ai écrit un peu vite, et ne me suis pas relu en profondeur, j'espère ne pas avoir fait d'erreur. Que les autres lecteurs n'hésitent pas à me taper dessus si c'est le cas

Cordialement,

Kohntark -

mercredi 16 juin 2010 à 01:09:47 | Re : probleme binaire en php

jarodjarod

merci beaucoup mon ami, tout est claire et net.
que dieu sois avec toi.


Cette discussion est classée dans : binaire, php, probleme, contient, 0x01


Répondre à ce message

Sujets en rapport avec ce message

probleme de chemin !!! [ par Xime ] bonjour :)voila g des problemes pour l'affichage des pages html et php, j'aurais voulu savoir ce que vous utilisez pour ouvrir les pages pour exemple Securité avec INCLUDE [ par bacto ] bonjour,je voudrais savoir si il y a un probleme de securité si je fais un site avec des liens vers des pages en php de la forme "mapage.php?url=paged Probleme sur Multimania [ par g0belin ] Ben voila je fait une page qui tourne bien sur easyphp mais avec multimania sa marche plus !!!!--------------Message d'erreur--------------------Fatal PHP: gif animé devient statique [ par JEROMAX ] Salutje ne sais pas si c'est le bon endroit pour poser cette question mais j'y vais quand même.. ;-)Mon probleme est le suivant: Je rafraichi une div probleme de classe en php [ par Elkaire ] Donc voila mon probleme!!dans une premiere page je rensegne les insances de mon objet. Une fois renseigné je peux réutiliser les instances cet objet d probleme avec mes fonctions [ par ludlu ] j'ai une fonction qui ne s'execute pas! si qq peut m'aider.voici le code source:function verif_session(){session_start();if(!session_is_registered("gc probleme php et explorer [ par sirspycho ] j'ai programmé un site avec un ami. on a utilisé le php, le javascript et comme base de donnée mysql.Pour travailler en local (nous n'avions pas encor newsletter php : probleme envoi mail hml [ par allowen ] bonjour, j'ai fait une newsletter en php mais lorsque j'envoie un mail seul une personne reçoit le contenu, les autres recevant seulement le lien de probleme javascript php [ par remi51 ] Bonjour,J'aimerais savoir si c'est possible de transferer une variable javascript dans une variable php sans recharger systematiquement la page.C'est Tableau en php(débutant) [ par iomega ] Bonjour à tous je suis débutant en php et je voudrai manipuler un tableau voici mon problèmele tableau $tab100 contient des valeurs 0.125,0.25 etc...j


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,172 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales