TD1 : Entiers, flottants, encodage

TD 1

EX 2

a) $2^n$ bits b) 101 si ils sont alignés. c)

  • $0$ à $2^n-1$
  • $-2^{n-1}$ à $2^{n-1}$ d) i) 0010 + 0110 = 1000 ii) 0101 + 1010 = 1111 iii) 1011 + 1101 = (1)1000 iv) 1010 + 0110 = (1)0000 v) 1111 + 1111 = (1)1110 (15+15=14) e) Dans la version :
  • signée : 1 = le bit de signe (-) 1011 = -6 (regarder le complémentaire en enlevant le bit de signe, puis : +1 OU partir de -8 = 1000)
  • non signée

NB: Nbs flottants :

  • Normes : LI3E254 / LI3E254 : exposant sur 13 bits (il y a une représentation de +inf)
  • Attention : +0 != -0
  • Addition non commutative car +0 et -0 ne commutent pas.
  • Mantisse ⟶ normalisée
  • MAIS : il existe des réels non normalisés (notamment les nbs proches de 0).
  • 0/0 = Not A Number

NB: Comment savoir que x (NON NUL) est une puissance de deux ? ⟶

En C : x&-x: la plus grande puissance de deux qui divise x

x = ⋯ a_2 a_1 1 0 0 0 0 \\ -x = ⋯ \bar{a_2} \bar{a_1} 1 1 1 1 1

DONC : (x&-x) == x

f) i) Pas unicité de la représentation des nombres : il y a +0 et -0 ii) En complément à 1: - 0xxxx... ≥ 0 - 1xxxx... ≤ 0

Ex :
```
   -1 = 1110
   -1 = 1110
      ------
    (1)1100
    ⟶ 1101 = -2 (en mettant la retenue sur les unités)
```

Pour tous $x, y \geq 0$ :

$-x$ est codé comme $\lnot x$

Lemme : $(-x) + (-y) = (\lnot x) + (\lnot y) + 1$

Preuve : Si $x = \sum\limits_{0\leq i \leq n} a_i 2^i$

\lnot x = \sum\limits_{0\leq i \leq n} (1-a_i) 2^i = \sum\limits_{0\leq i \leq n} 2^i - x \\ = (-1)-x

Lemme :

  • Si $x+ \lnot y < 2^n$ (génère une retenue) alors $x+\lnot y$ code $x-y$
  • Si $x+ \lnot y \geq 2^n$ (pas de retenue) alors $x+\lnot y+1$ code $\lnot (x+y) = -1-(x+y)$

iii) Par l’absurde : si ça ne termine pas, alors l’addition du 1 à la fin a généré une retenue, donc nécessairement on avait $x+y = 2^n - 1$. Dans ce cas-là, $x+y+1 = 2^n$ = 1 0⋯0, auquel cas on peut faire +1 et ça termine à l’étape suivante (au pire : on fait deux étapes supplémentaires).

g) Le type byte en Java est un octet signé.

101+87 = 188 (mod 256) = -68

(après 127, on revient à -128)

EX 3

a) Jean nie ma czatu (Jean n’a pas de chat)

b) Un pêcheur à la ligne

c) “Je vais à Sète cet été.” le mail a été envoyé en UTF-8, mais lu en ISO Latin-1.

(hex) C3 A9 = (binaire) 1100 0011 1010 1001 ⟶ c’est de l’unicodz

d) szczęście

e) Défauts de l’UTF-32 :

  • Pas très compact : trop verbeux (n lettres prennent 4n caractères)
  • Pas rétrocompatible

f) Code préfixe : aucun caractère n’est préfixe d’un autre. jak ze mną \n

g)

  • Moins de défaut de taille
  • Un peu plus rétrocompatible : rétrocompatible avec ASCII pur
  • Avantage : Si on a une partie du code : on laisse tomber tous les 10 jusqu’à tomber sur un caractère où on ne commence plus par 10

Défaut :

  • Tous les caractères ne sont pas de même longueur, donc récupérer le i-ème est compliqué.

h) HTML

4) PHP

Leave a comment