Adloun

En base -2, les poids sont 1, -2, 4, -8, 16… On peut alors écrire tous…

Exercice supplémentaire · niveau 3 (difficile) · NSI (première), chapitre 1 — Représenter les entiers · D'autres bases, d'autres codages

Énoncé

En base , les poids sont , , , , … On peut alors écrire tous les entiers relatifs, positifs comme négatifs, sans aucun bit de signe. Écrire les fonctions de conversion dans les deux sens et valider sur .

Corrigé

L'algorithme. On reprend les divisions successives, mais le reste doit rester dans : on prend (toujours ou en Python) et on poursuit avec .


def vers_base_moins_deux(n):
    """Écriture de l'entier relatif n en base -2."""
    if n == 0:
        return "0"
    s = ""
    while n != 0:
        r = n % 2
        n = (n - r) // -2
        s = str(r) + s
    return s

def depuis_base_moins_deux(s):
    v = 0
    for c in s:
        v = v * (-2) + int(c)
    return v

for n in range(-200, 200):
    assert depuis_base_moins_deux(vers_base_moins_deux(n)) == n

cas passent.

Quelques valeurs. , , , .

Contrôle à la main : vaut . Et vaut .

Prolongement : contrairement au complément à deux, ce codage n'a pas de longueur fixée et représente exactement une fois chaque entier relatif. Il est resté une curiosité : l'addition y est bien plus compliquée, et c'est l'addition que le processeur doit faire des milliards de fois par seconde.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.