# (logior) et (logand), manipulations binaires en AutoLISP

**URL:** https://dessein-tech.com/t/logior-et-logand-manipulations-binaires-en-autolisp/9751
**Category:** AutoLISP
**Tags:** lisp, programmation, tuto
**Created:** 2026-01-22T21:57:06Z
**Posts:** 3

## Post 1 by @Patrick — 2026-01-22T21:57:06Z

Ces deux fonctions sont les piliers de la manipulation **binaire** (bit à bit). Elles sont indispensables pour gérer les variables système à options multiples (comme `OSMODE`) ou les codes DXF (comme le code 70).

Voici comment les comprendre et les utiliser concrètement.

### 1. LOGIOR (L’Additionneur / L’Imposeur)

**Logique :** «&nbsp;Si un bit est à 1 dans l’un OU l’autre nombre, le résultat est 1.&nbsp;»

**Usage :** Sert à **AJOUTER** une option ou **FORCER** un état, sans se soucier de ce qui est déjà activé.

**Exemple concret : Ajouter l’accrochage «&nbsp;Extrémité&nbsp;» (Bit 1)**

Imaginez que `OSMODE` soit réglé sur «&nbsp;Centre&nbsp;» (4). Vous voulez ajouter «&nbsp;Extrémité&nbsp;» (1) sans désactiver le Centre.

- Si vous faites `(setvar "OSMODE" 1)`, vous perdez le Centre.

- Si vous faites `(+ 4 1)`, ça marche, mais si «&nbsp;Extrémité&nbsp;» était déjà actif, vous obtenez 5 (4+1), ce qui est faux.

Avec `logior`, on fusionne les bits :

```
;; Force l'accrochage Extrémité (1) quel que soit le réglage actuel
(setvar "OSMODE" (logior (getvar "OSMODE") 1))

;; Force Extrémité (1) ET Intersection (32) en même temps
(setvar "OSMODE" (logior (getvar "OSMODE") 33))
```

### 2. LOGAND (Le Filtre / Le Vérificateur)

**Logique :** «&nbsp;Si un bit est à 1 dans l’un ET l’autre nombre, le résultat est 1 (sinon 0).&nbsp;»

**Usage :** Sert à **VÉRIFIER** si une option est active, ou à **ISOLER** une propriété.

**Exemple concret : Vérifier si «&nbsp;Extrémité&nbsp;» est actif**

Peu importe la valeur totale de `OSMODE` (ça peut être 4135), on veut juste savoir si le bit 1 est allumé.

```
;; Si le résultat du filtrage par 1 est égal à 1...
(if (= (logand (getvar "OSMODE") 1) 1)
    (princ "\nL'accrochage Extrémité est ACTIF.")
    (princ "\nL'accrochage Extrémité est INACTIF.")
)
```

### 3. L’Astuce Expert : SUPPRIMER une option (Le masque inversé)

Comment enlever l’accrochage «&nbsp;Proche&nbsp;» (512) sans toucher au reste ?

On ne peut pas faire une soustraction simple (si l’option n’est pas active, on soustrait dans le vide).

Il faut combiner `logand` avec l’opérateur **`~`** (Bitwise NOT / Complément).

`(~ 512)` crée un masque où **tout est à 1 sauf le 512**.

```
;; Enlever "Proche" (512) proprement
(setvar "OSMODE" (logand (getvar "OSMODE") (~ 512)))
```

_Traduction : «&nbsp;Garde tout ce qui est actif ([OSMODE](https://help.autodesk.com/view/ACD/2026/FRA/?guid=GUID-DD9B3216-A533-4D47-95D8-7585F738FD75)) À CONDITION QUE ce soit aussi dans le masque ‹&nbsp;Tout sauf 512&nbsp;›.&nbsp;»_

### Résumé pour le développeur

- **Activer** un drapeau : `(logior ValeurActuelle Drapeau)`

- **Vérifier** un drapeau : `(= (logand ValeurActuelle Drapeau) Drapeau)`

- **Désactiver** un drapeau : `(logand ValeurActuelle (~ Drapeau))`

---

## Post 2 by @VDH-Bruno — 2026-01-23T08:24:55Z

Bonjour,  
Attention en AutoLisp c’est _ **LOGIOR** _, une coquille c’est glissé dans l’article il manque le «&nbsp;i&nbsp;» de la fonction.  
Cdt

---

## Post 3 by @Patrick — 2026-01-23T15:49:30Z

Oui, merci, c’est corrigé.
