petit problème booléen...

WRInaute accro
Bonjour

Pour un système de cookie, je cherche à fixer la formule d'affectation bit-à-bit de la valeur du cookie.

Cette valeur est suivant les rubriques gérées par le cookie :

Rubrique 1 : 0 ou 1
Rubrique 2 : 0 ou 2
etc...

Chaque bit correspond à une rubrique, le 0 vaut inactif, le 1 actif.

Le problème est facile pour function consent(rang) :

cookieValue = LastcookieValue | (( (rang - 1 ) ** 2 ) + 1);


Pour deny(rang ) , j'envisage :

cookieValue = ( ! ( LastcookieValue | ( (rang - 1) ** 2) + 1 ) ) ^ ( ( rang - 1) ** 2) + 1)

C'est-à-dire :

Mettons n la valeur initiale du cookie, q la valeur du bit de rang : ( rang - 1 ) :

(! ( n | ! q ) ) ^ ( ! q )

Le blème est que : Le bit q est à 0 dans deny(), le bit correspondant dans n doit être mis à 0.

Cà marche ou non ?

Merci beaucoup.
 
WRInaute accro
Pardon pardon

La négation était mal formulée :

cookieValue = ! ( LastcookieValue | ! ( (rang - 1) ** 2) ) ) ^ ! ( ( rang - 1) ** 2) )

J'espère qu'il n'y a plus d'erreur.

Le bit q est censé être à 0.

Sa négation à 1.

N'y a -t-il pas une erreur ?

( rang - 1) ** 2 ne serait-il pas le bit rang à 1 ?

Voir ci-dessous la correction.

La value du cookie OU bit=1 met à 1 le bit correspondant de la value.

Le XOR du résultat avec le bit=1 fait la négation de tous les bits de la value sauf le bit=1 qui devient égal à 0.

La négation du résultat fait l'inverse : valeur initiale du cookie sauf le bit qui devient=0.

Cà marche, non ?

Amicalement.

P. S. Correction :

cookieValue = ! ( LastcookieValue | ( (rang - 1) ** 2) ) ) ^ ( ( rang - 1) ** 2) )

Merci de vérifier ?

Merci beaucoup pour votre aide.
 
Dernière édition:
WRInaute passionné
jamais vu ces opérateurs en booléens c'est quoi **? ^?
Le pipe je suppose que c'est le OU , bien qu'en booléen c'est le +
 
WRInaute passionné
** c'est puissance, là il montre du JavaScript je suppose.

(ah quoi que je vois qu'il a aussi un ^ )
(en tout cas, une belle démonstration de comment se prendre la tête pour faire des cookies)
 
WRInaute accro
Rebond

J'ai un léger bug dans le deny()

Il n'y a pas besoin de calculer l'inverse de cookieValue dans acceptValue.

Il semblerait que pour le deny() le calcul :

JavaScript:
        // rubrique = 1, 2, 3, 4, etc...
        // Valeur à affecter au Cookie.
        // Formule : !(n |!q)^(!q) 
        // ( Le rubrique-ième bit q est à 0 )
        // q1 = !q ( bit à 1 )
        var q1 = 2 ** (rubrique - 1);      
        var cookieValue = getCookie(cookieConsent);
        if(cookieValue === null) {
        cookieValue = 0;
        }
        cookieValue |= q1;
        var acceptValue = (cookieValue ^ q1);

Si le cookie est à 1 au départ, il reste à 1 puis théoriquement 1 ^ 1 donne 0.

Si le cookie est à 0 au départ il devient 1 puis 1 ^ 1 = 0.

Mais ce ne sont que des valeurs à un bit.

Faut que je teste pour des valeurs de cookie > 1.

Bien amicalement.


JavaScript:
             consent: function (rubrique) {
        // rubrique = 1, 2, 3, 4, etc...
        // Valeur à affecter au Cookie.
        // Formule : n|q
        // ( Le rubrique-ième bit q est à 1 )
        var q = 2 ** (rubrique - 1);
        var cookieValue = getCookie(cookieConsent);
        if(cookieValue === null) {
        cookieValue = 0;
        }
        cookieValue |= q;
            var cookieDate = new Date;
            cookieDate.setFullYear(cookieDate.getFullYear() + 2);
            var cookieExpString = cookieDate.toGMTString();
            //console.log(cookieExpString);
            document.cookie = 'CM_cookieConsent=' + cookieValue + ';expires=' + cookieExpString + ';domain=.' + location.host.split('.').slice(-2).join(".") + ';path=/';
            var c = '';
            while (c = removedCookies.pop()) {
                if (c.indexOf('expires=') !== -1) {
                    document.cookie = c;
                } else {
                    document.cookie = c + ';expires=' + cookieExpString;
                }
            }
        },
        deny: function (rubrique) {
        // rubrique = 1, 2, 3, 4, etc...
        // Valeur à affecter au Cookie.
        // Formule : !(n |!q)^(!q)
        // ( Le rubrique-ième bit q est à 0 )
        // q1 = !q ( bit à 1 )
        var q1 = 2 ** (rubrique - 1);
        var cookieValue = getCookie(cookieConsent);
        if(cookieValue === null) {
        cookieValue = 0;
        }
        cookieValue |= q1;
        var acceptValue = (cookieValue ^ q1);
            var cookieDate = new Date;
            cookieDate.setFullYear(cookieDate.getFullYear() + 1);
            var cookieExpString = cookieDate.toGMTString();
//            console.log(cookieExpString);
            document.cookie = 'CM_cookieConsent=' + acceptValue + ';expires=' + cookieExpString + ';domain=.' + location.host.split('.').slice(-2).join(".") + ';path=/';
            var c = '';
            while (c = removedCookies.pop()) {
                console.log(c + ';expires=' + cookieExpString);
                if (c.indexOf('expires=') !== -1) {
                    document.cookie = c;
                } else {
                    document.cookie = c + ';expires=' + cookieExpString;
                }
            }
        },
 
WRInaute accro
Pardon pardon.

Algorithme pour la fonction deny(rubrique):

1) Inversion bit à bit cookie,
2) Mise à 1 du ième bit,
3) inversion du résultat.

Celà donne le cookie de départ dont le ième bit a été mis à zéro.


Voici :

JavaScript:
deny: function (rubrique) {
// rubrique = 1, 2, 3, 4, etc...
// Valeur à affecter au Cookie.
// Formule : !(!n |q)
// ( Le rubrique-ième bit q est à 1 )
var q = 2 ** (rubrique - 1);
var cookieValue = getCookie(cookieConsent);
if(cookieValue === null) {
cookieValue = 0;
}
// 2 inversion successives.
cookieValue = ~cookieValue;
// Mise à 1 du bit.
cookieValue |= q;
// 2ème inversion.
cookieValue = ~cookieValue;
console.log('CM_cookieConsent = ' + cookieValue);

J'ai testé jusqu'à cookieValue=[0-7] et rubrique=[1-3].

Cà marche.

Elémentaire.

Bien à vous.

Amicalement.
 
WRInaute accro
Simple

Au lieu de contenir 0 ou 1 ( cookies interdits/permis ), le cookie va contenir un entier, dont chacun des bits ( 0 ou 1 ), correspondra à la rubrique/type de cookies permis ou interdits.

La fonction consent(i) permet le cookie de rubrique i, et la fonction deny(i) interdit le cookie de rubrique i.

Je fait le background avant le foreground ( mécanisme avant l'interface).

Pour plus d'infos avancez vos questions ?

Respectueusement.
 
WRInaute accro
Messieurs Spout et ABCWEB

Vous cherchez quelle réaction exactement ?

Que cherchez vous à dire ?

Après tout, quand on ne dit rien...

Amicalement.
 
WRInaute passionné
Je cherche à dire que tu poses des questions, on essaie de t'aider on prend du temps sur ton problème et quand on pose des questions il n'y a pas de réponse. Et quand t'as trouvé ta petite mayonnaise tout seul tu publie que tu es content d'avoir trouvé. En résumé de mon coté je vais arreter de me pencher sur tes problèmes car j'ai juste l'impression que tu es la pour montrer sur quoi tu bosses et que tu n'es pas ouvert à ce qu'on peut en dire.
 
WRInaute accro
Bonjour ABCWEB

Je te prie de me pardonner.

Je croyais que tu trouverais toi-même la réponse à ta question.

L'opérateur | c'est le OU binaire.

L'opérateur ! c'est le NON logique. Je m'étais trompé en l'utilisant, c'est le ~ NON unaire qu'il fallait.

Le & c'est le ET binaire.

Celà dit c'est vrai que j'aurais peut-être du répondre à ta question, et puis je croyais que le problème était booléen alors qu'il relevait d'un calcul de bits.

Je te prie de m'excuser de mon impolitesse.

En ce qui concerne Spout, çà fait depuis longtemps qu'il m'adresse des messages subliminaux.

Bien amicalement.
 
WRInaute accro
En ce qui concerne Spout, çà fait depuis longtemps qu'il m'adresse des messages subliminaux.
Faut bien avouer que tu es souvent hermétique à ce que l'on peut te dire. Tu viens ici faire part de tes travaux, merci d'ailleurs pour ce partage mais tu n'es pas souvent dans le dialogue. C'est presque un monologue. Tu sembles être très pointu en technique mais tu as la tête peut-être un peu trop dans le guidon.
Un forum c'est avant tout un espace de partages donc de relation "humaine" ;)
 
WRInaute accro
Pardon

Sur les messages que j'ai reçu sur ce thread, aucun ne répondait à mes questions, et la plupart étaient des remarques hermétiques.

Je demanderais à notre arbitre Monsieur Olivier Duffez de trancher.

Amicalement.
 
WRInaute passionné
Bonjour ABCWEB


Je croyais que tu trouverais toi-même la réponse à ta question.

Alors je connais très bien les opérateur logique booléen le problème c'est que tu ne les utilise pas. D'ou ma question parce que tu utlises des opérateurs que je connais pas. Après c'était pour t'aider et par conséquent trouver seul la réponse à ma question.. ben non en fait je m'en fout c'est pour toi..
 
WRInaute occasionnel
Code:
// Le ic dans le / du # binaire endorphique
// Valeur à affecter par mutation saturnene *| tiré du _ + tiré par le cheu Veu
// Formule : !?§
= @ = coockies au pépites de chocolats pour le RGPDG ARC unitaire
c'est simple non ?
Aller un peu d'humour, j'ai rien compris o_O ? c'est pas dans Wordpress :p;) et c'est surtout très pointu, trop mais vraiment beaucoup trop pour moi, j'aime découvrir mais là c'est du mandarin mixé avec du chinois pour moi.
Chapeau pour le niveau en tout les cas.
 
Discussions similaires
Haut