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
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