Aller au contenu

Messages recommandés

Posté(e)

Bonjour est ce que quelqu'un pourrait m'expliquer comment fonctionne la fonction "boole". Car malgré le PDF de gilles (Introduction à Autolisp) j'ai du mal à comprendre même avec les exemples .. la table de vérité ok mais pour le reste je comprends pas par exemple pourquoi (boole 6 6 5) vaut 3 ... A ce niveau là je dois être con ou je sais pas mais je bloque.

 

Merci :rolleyes:

  • Like 1
  • Upvote 1
Posté(e)

Salut,

 

Je vais essayer. Cette fonction s'appelle Boole parce qu'elle utilise l'algèbre de Boole (aussi appelée calcul Booléen ou logique Booléenne).

 

Ici cette logique est appliquée à des comparaisons "bit à bit" sur des entiers représentant des codes binaires.

 

Pour reprendre l'exemple cité : (Boole 6 6 5)

Le premier 6 représente l'opérateur, soit la somme des bits opérateur 2 et 4.

 

6 et 5 sont codes binaires à comparer "bit à bit":

6 correspond à la valeur binaire : 1 1 0, autrement dit : 4 + 2 + 0
5 correspond à la valeur binaire : 1 0 1, autrement dit : 4 + 0 + 1

Avec le bit opérateur 1 (AND), il faut que les deux bits comparés soient "vrais" (différents de 0). Seul 4 est à la fois présent dans 6 et 5, donc :

(Boole 1 6 5) ; retourne 4 comme (logand 6 5)

Avec le bit opérateur 2, il faut que le premier bit soit "vrai" (différent de 0) et le second "faux" (égal à 0). Seul 2 est "vrai" dant le premier entier et faux dans le second.

(Boole 2 6 5) ; retourne 2

Avec le bit opérateur 4, il faut que le premier bit soit "faux" (égal à 0) et le second "vrai" (différent de 0). Seul 1 est "vrai" dant le second entier et faux dans le premier.

(Boole 4 6 5) ; retourne 1

Avec l'opérateur 6 (XOR), soit 4 + 2, il faut, soit que le premier soit "vrai" et le second "faux" (bit opérateur 2) ; soit l'inverse (bit opérateur 4). On a donc 2 et 1.

(Boole 6 6 5) ; retourne 3 (autrement dit 2 + 1)

Avec l'opérateur 1 + 2 + 4 = 7 (OR), il faut soit que les deux bits soient "vrais" (comme 4) ; soit que le premier soit "vrai" et le second "faux" (comme 2) ; soit que premier soit "faux" et le second "vrai" (comme 1) :

(Boole 7 6 5) ; retourne 7 (4 + 2 + 1) comme (logior 6 5)

  • Like 1
  • Upvote 2

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Tout d'abord merci pour ta réponse Gile ! c'est gentil. J'essaie de comprendre mais j'avoue que j'ai du mal a trouver les bons raisonnements ...

 

Jusqu'à là je comprends la table de vérité avec les opérateurs logiques 1,2,4,8 AND OR XOR NOR etc mais là ou j'ai du mal c'est de comprendre comment sont comparés les bits.

 

Déjà (boole 1 6 5) 6 et 5 sont bien des bits ou des entiers ou les deux ?

 

Quand tu dis pour cet exemple, seul "4 est à la fois présent dans 6 et 5" j'arrive pas à voir ça :mellow:

 

Ainsi que dans les autres exemples plus bas (boole 2 6 5)"Seul 2 est "vrai" dant le premier entier et faux dans le second". Je suis désolé je pense que tu t'es donné du temps pour poser tes mots et t'expliquer mais c'est moi qui bloque là..

 

Merci encore

  • Upvote 1
Posté(e)

6 et 5 sont des nombres entiers décimaux (base 10) mais quand on fait des comparaisons dites 'bits à bits', il faut les voir sous leur forme binaire (base 2)

6 en base 2 s'écrit 110 (soit 2^2 + 2^1 + 0^0 = 4 + 2 + 0)

On dit que les bits de 6 sont, du bit de poids fort au bit de poids faible, 1, 1 et 0.

5 en base 2 s'écrit 101 (soit 2^2 + 0^1 + 2^0 = 4 + 0 + 1)

Les bits de 5 sont donc 1, 0 et 1.

Comparer 'bit à bit' 6 et 5, c'est comparer respectivement chaque bit de poids équivalent. La fonction Boole retourne la somme des décimaux correspondants à chaque bit.

 

Boole 1 (AND) : les deux bits doivent être à 1

       |  binaire  |    décimaux 
6       | 1 | 1 | 0 |  4 + 2 + 0 = 6
5       | 1 | 0 | 1 |  4 + 0 + 1 = 5
boole 1 | 1 | 0 | 0 |  4 + 0 + 0 = 4

 

Boole 2 : le premier bit doit être à 1 et le second à 0

        |  binaire  |    décimaux 
6       | 1 | 1 | 0 |  4 + 2 + 0 = 6
5       | 1 | 0 | 1 |  4 + 0 + 1 = 5
boole 2 | 0 | 1 | 0 |  0 + 2 + 0 = 2

 

Boole 4 : le premier bit doit être à 0 et le second à 1

        |  binaire  |    décimaux 
6       | 1 | 1 | 0 |  4 + 2 + 0 = 6
5       | 1 | 0 | 1 |  4 + 0 + 1 = 5
boole 4 | 0 | 0 | 1 |  0 + 0 + 1 = 1

 

Boole 6 (XOR ou exclusif) : un et un seul des deux bits doit être à 1 (combinaison des deux précédents 2 + 4 = 6)

        |  binaire  |    décimaux 
6       | 1 | 1 | 0 |  4 + 2 + 0 = 6
5       | 1 | 0 | 1 |  4 + 0 + 1 = 5
boole 6 | 0 | 1 | 1 |  0 + 2 + 1 = 3

 

Boole 7 (OR) ou inclusif : le premier bit et/ou le second bit doivent être à 1

        |  binaire  |    décimaux 
6       | 1 | 1 | 0 |  4 + 2 + 0 = 6
5       | 1 | 0 | 1 |  4 + 0 + 1 = 5
boole 1 | 1 | 1 | 1 |  4 + 2 + 1 = 7

 

En programmation les codes binaires sont très utilisés parce qu'ils permettent de stocker à l'aide d'un seul nombre entier plusieurs possibilités d'états différents.

Par exemple AutoCAD stocke les accrochages aux objets actifs dans la variable système osmode sous la forme d'un nombre entier.

 

Extrait de l'aide :

Définit les accrochages aux objets actifs
Le paramètre est stocké sous forme de code binaire en utilisant la somme des valeurs suivantes :
0    AUCun
1    EXTREmité
2    MILieu
4    CENtre
8    NODal
16   QUAdrant
32   INTersection
64   INSertion
128  PERpendiculaire
256  TANgente
512  PROche
1024 Annule tous les accrochages aux objets.
2048 Intersection apparente
4096 EXTEnsion
8192 PARallèle

[...]
Quand les accrochages aux objets sont désactivés à l'aide du bouton Accrobj de la barre d'état, le code binaire 
16384 (0x4000) est renvoyé, en plus de la valeur normale d'OSMODE. Cette valeur supplémentaire permet aux 
développeurs de distinguer ce mode des modes d'accrochage aux objets désactivés à partir de la boîte de dialogue 
Paramètres de dessin. Si vous affectez une valeur à ce bit, les modes d'accrochage aux objets actifs sont 
désactivés. Attribuer une valeur à OSMODE alors que ce bit est désactivé active les modes d'accrochage aux objets 
actifs. 

 

Exemple

(Boole 1 (getvar 'osmode) 3)

ou

(logand (getvar 'osmode) 3)

retournera 3 (2 + 1) si les accrochages extrémité et milieu sont activés, 1 si extrémité est activé mais pas milieu, 2 si milieu est activé et pas extrémité et 0 si aucun des deux n'est activé.

 

(setvar 'osmode (boole 7 (getvar 'osmode) 16384))

ou

(setvar 'osmode (logior (getvar 'osmode) 16384))

ajoute 16384 à la valeur actuelle de osmode si ce bit n'est pas déjà present ce qui équivaut au F3 pour désactiver les accrochages actifs.

 

(Boole 7 47 16384)

retourne 16431 (16384 est ajouté)

(Boole 7 16431 16384)

retourne aussi 16431 (16384 n'est pas ajouté)

 

Pour réactiver les accrochages, il faut soustraire 16384, mais seulement si ce bit est présent. On utilise alors l'opérateur de bit NOT (ou complément à 1) avec (Boole 1 ...) (ou logand)

(Boole 1 16431 (~ 16384))

retourne 47 (16384 est soustrait)

(Boole 1 47 (~ 16384))

retourne aussi 47 (16384 n'est pas soustrait)

 

Le ou exclusif XOR peut être utilisé pour des bascules :

(Boole 6 (getvar 'orthomode) 1)

active le mode orthogonal s'il n'était pas activé ou le désactive s'il l'était.

 

PS : pour une bascule entre 0 et 1, la fonction 1- fait aussi très bien l'affaire.

  • Upvote 3

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Par curiosité j'ai lu le post car je ne connaissais pas BOOLE (pas forcément besoin ou trop compliqué va savoir...:unsure: ) .

 

A la 1ère explication j'étais comme MATEUS... largué mais Maistre (Gile) à su faire en sorte que ce soir je vais me coucher moins... disons bête car je pense avoir compris et savoir comment utiliser cette fonction (et celles afférantes).

 

Donc merci à MATEUS de d'avoir amorcé la pompe à curiosité et à (Gile) de sa maîtrise de l'enseignement.

 

(Cirage de pompe gratuit)

j'suis trop content :)

  • Upvote 1

Sea U Letter

--------

La mort, c'est un peu comme une connerie.

Le mort, lui, il ne sait pas qu'il est mort. Ce sont les autres qui sont tristes.

Le con, c'est pareil.

Posté(e)

C'est fou la programmation fascinant et pointilleux à la fois ! Je te remercie Gile tes explications sont toujours claires et tu prends du temps pour les autres je trouve ça admirable. Grâce à toi j'ai eu mes réponses et je suis ravi que par la même occasion ça puisse aider d'autres personnes comme "AinTerreNette". A bientôt et merci encore :)

Posté(e)

Coucou

 

Un grand merci à toi (gile), vraiment.

Je ne suis pas intéressé par le sujet mais je l'ai lu et je me doutais que tu y répondrais, tu m'as (nous) a encore surpris par tes explications qui prouvent, si besoin est, une grande connaissance du logiciel et de la programmation.

Quand on sait comment tu y es venu, souvenirs de CadXP, on est encore plus épaté, sans compter ta simplicité et ta courtoisie sans jamais te mettre en avant plus que ça.

Quel chemin parcouru, j'aimerais en avoir fait 20 %.

 

Franchement je te remercie du bon du cœur.

 

Amitiés

  • 3 ans après...
Posté(e)

J'arrive bien après la bataille mais je commence tout juste à m'intéresser à la programmation AutoCAD et j'ai bloqué exactement au même point que mateus.

Merci beaucoup pour ces explications, le concept du code binaire n'est pas intuitif du tout au première abord...

Projeteur Béton Armé sur Revit et AutoCAD 2023

Une connaissance acquise ne devient vivante que si on l’a repensée par soi-même.

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité