Il y a 10 types de personnes dans le monde : celles qui comptent en binaire et les autres (merci Gilles pour le titre!)

Bonjour, voici un résumé d’une bien intéressante présentation puis discussion qui explore le fonctionnement des opérations « bit à bit » dans AutoLISP.

J’ai piqué le titre à Gilles ! :wink:

Vous n'avez pas le temps de tout lire? Voici un résumé

L’auteur, Gilles Chanteau, explique comment les nombres entiers sont représentés en binaire sur 32 bits, avec le bit de poids fort indiquant le signe. Des explications détaillées sont fournies pour les fonctions AutoLISP clés telles que ~ (tilde), boole, logand, logior et lsh, illustrant leur utilisation dans la manipulation de valeurs binaires. L’auteur utilise des exemples concrets, comme la gestion des accrochages aux objets dans AutoCAD® via la variable système OSMODE et le stockage des informations de couleur et de transparence dans les fichiers DXF. Le fil de discussion qui suit met en lumière des applications pratiques de ces concepts, notamment la conversion entre les valeurs de transparence et leur représentation binaire dans le code DXF. Des membres de la communauté partagent leurs propres solutions et interrogent sur des aspects spécifiques de la manipulation des bits dans AutoCAD®

Introduction aux nombres entiers signés codés sur 32 bits

Cette section explique le fonctionnement des nombres entiers signés codés sur 32 bits utilisés par AutoLISP, en précisant leur plage de valeurs et leur importance pour les opérations « bit à bit » (bitwise).

1. Fonction ~ (tilde)

Explication de la fonction ~ qui renvoie le « complément à 1 » d’un nombre (bitwise NOT), inversant chaque bit et donc le signe, avec exemples et équivalence arithmétique.

2. Fonction boole

Présentation de la fonction boole, outil central pour les opérations bit à bit. Description de son fonctionnement avec un premier argument définissant l’opérateur (parmi 16) et les suivants étant les entiers à traiter.

2.1 Opérateurs fondamentaux

Illustrations détaillées des 4 opérateurs fondamentaux (1, 2, 4 et 8) avec exemples montrant leur action sur chaque bit de deux nombres.

2.2 Opérateurs combinés

Exemples et explications des opérateurs 6 (XOR) et 7 (OR) construits à partir des opérateurs fondamentaux.

3. Fonctions logand, logior et exemples pratiques

Introduction des fonctions logand (équivalent à boole 1) et logior (équivalent à boole 7) pour les opérations AND et OR, plus courantes.

3.1 Gestion des accrochages aux objets avec OSMODE

Exemple concret d’utilisation des opérations bit à bit pour gérer les modes d’accrochage dans AutoCAD® via la variable système OSMODE. Illustration de l’activation et désactivation d’accrochages spécifiques à l’aide de logior, logand et ~.

4. Fonction lsh

Fonction lsh pour décaler une valeur binaire vers la gauche (multiplication par 2^x) ou la droite (division entière par 2^x), avec exemples.

4.1 Conversion de couleurs RGB en entier et vice versa

Utilisation pratique de lsh pour convertir les valeurs R, G et B d’une couleur en un seul entier sur 24 bits (groupe DXF 420) et inversement. Fonctions rgb2int et int2rgb fournies en exemple.

5. Codes binaires dans les listes DXF et filtres de sélection

Explication de l’utilisation des codes binaires dans les groupes DXF (ex: groupe 70 pour les polylignes) et dans les filtres de sélection.

5.1 Opérateurs de filtre & et &=

Description des opérateurs & (AND logique différent de 0) et &= (AND logique égal à la valeur du filtre) pour filtrer les objets en fonction de codes binaires spécifiques dans leurs groupes DXF.

Discussion sur la transparence (code DXF 440)

Discussion approfondie (à travers des commentaires) sur la gestion de la transparence dans AutoCAD® via le code DXF 440. Analyse du code binaire, exploration de méthodes de conversion entre valeur décimale et niveau de transparence, et identification des bits utilisés et non-utilisés.

Fonction initget et gestion des bits d’arguments

Question sur l’utilisation de la fonction initget et la gestion des bits dans ses arguments pour activer/désactiver certaines options. Discussion sur les méthodes pour détecter les bits actifs et la possibilité d’une fonction native pour gérer ce type d’arguments.