Compare commits
No commits in common. "65cd883b3df7ec42f5d9fafe48e3a181d02c7fc2" and "eb5726c8d132be2c6f35428b1bb217d3320c010f" have entirely different histories.
65cd883b3d
...
eb5726c8d1
@ -29,7 +29,7 @@ Le programme prévisionnel est le suivant :
|
|||||||
- CM6 : Histoire du libre, de l'open-source et du captif
|
- CM6 : Histoire du libre, de l'open-source et du captif
|
||||||
* TD :
|
* TD :
|
||||||
- [TD1](td1-caracteres.md) : Codage des caractères
|
- [TD1](td1-caracteres.md) : Codage des caractères
|
||||||
- [TD2](td2-entiers.md) : Codage des entiers
|
- TD2 : Codage des entiers
|
||||||
- TD3 : Codage des réels
|
- TD3 : Codage des réels
|
||||||
- TD4 : Logique booléenne
|
- TD4 : Logique booléenne
|
||||||
- TD5 : Additionneur
|
- TD5 : Additionneur
|
||||||
|
@ -7,4 +7,6 @@ void main()
|
|||||||
unsigned char c = a + b;
|
unsigned char c = a + b;
|
||||||
|
|
||||||
printf("Value of c is: %d\n",c);
|
printf("Value of c is: %d\n",c);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -7,4 +7,6 @@ void main()
|
|||||||
char c = a + b;
|
char c = a + b;
|
||||||
|
|
||||||
printf("Value of c is: %d\n",c);
|
printf("Value of c is: %d\n",c);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -130,11 +130,11 @@ Virgule flottante
|
|||||||
- Couramment utilisé
|
- Couramment utilisé
|
||||||
|
|
||||||
|
|
||||||
Calcul exact (bonus, hors programme)
|
Pour approfondir
|
||||||
------------------------------------
|
----------------
|
||||||
|
|
||||||
Pour aller au-delà de ces limites, il faudra utiliser des biblothèques/logiciels dédiés au calcul, par exemple [SageMath](https://www.sagemath.org/), [Calcium](https://fredrikj.net/calcium/), du décimal codé binaire (DCB) ou encore les [fractions python](https://docs.python.org/3/library/fractions.html) (mais c'est une autre histoire...). Ici, on pourra avoir 0.1 + 0.2 = 3. Les nombres ne sont alors plus représentés comme les types de base vus précédemment qui sont les seuls sur lesquels savent calculer les CPU classiques, mais comme des types construits à plus haut niveau. Points d'attention :
|
Pour aller au-delà de ces limites, il faudra utiliser des biblothèques/logiciels dédiés au calcul, par exemple [SageMath](https://www.sagemath.org/). Ici, on pourra avoir 0.1 + 0.2 = 3. Les nombres ne sont alors plus représentés comme les types de base vus précédemment qui sont les seuls sur lesquels savent calculer les CPU classiques. Points d'attention :
|
||||||
- les calculs sont plus lents, car un calcul de ce type construit impliquera plusieurs calculs sur des types de base au niveau CPU
|
- les calculs sont plus lents, car un calcul SageMath impliquera plusieurs calculs sur des types de base au niveau CPU
|
||||||
- les types que vous manipulerez par défaut dans les langages de programmation les plus courants sont uniquement les types de base, efficaces mais donc inexacts.
|
- les types que vous manipulerez par défaut dans les langages de programmation les plus courants sont uniquement les types de base, efficaces mais donc inexacts.
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
TD2 Codage des entiers
|
|
||||||
======================
|
|
||||||
|
|
||||||
Les trois systèmes utilisés ici (entiers positifs, complément à 1, complément à 2) sont décrits avec les détails suffisants sur la [page Wikipedia dédiée](https://fr.wikipedia.org/wiki/Syst%C3%A8me_binaire). Jetez-y un œil très rapide en début de séance (un parcours du plan, pas une lecture) puis revenez-y au moment nécessaire.
|
|
||||||
|
|
||||||
L'objectif de ce TD est de faire les calculs, vous ne devez donc pas utiliser de conversion automatique (par une calculatrice ou un site web) lors des passages binaire <-> décimal.
|
|
||||||
|
|
||||||
Table de conversion binaire <-> hexadécimal
|
|
||||||
-------------------------------------------
|
|
||||||
|
|
||||||
Construisez sur votre feuille un tableau de conversion binaire <-> hexadécimal allant de 0x0 à 0xF. Cela sera très utile pour la suite.
|
|
||||||
|
|
||||||
| Hexa | Bin |
|
|
||||||
| --- | ---- |
|
|
||||||
| 0x0 | 0000 |
|
|
||||||
| 0x1 | 0001 |
|
|
||||||
| ... | ... |
|
|
||||||
| 0xF | 1111 |
|
|
||||||
|
|
||||||
(Il est évidemment facile de trouver une telle table sur internet mais c'est l'occasion de valider votre compréhension du binaire/hexa, faîtes donc l'exercice sans chercher de modèle)
|
|
||||||
|
|
||||||
Entiers positifs
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Les entiers positifs s'encodent en changeant leur base directement du décimal au binaire. C'est par exemple le type "unsigned char" en C, pour un entier non signé sur un seul octet.
|
|
||||||
|
|
||||||
> Question 1 : Convertissez en binaire puis en hexadécimal sur un octet le nombre 138. Réalisez le calcul en décomposant en puissances de 2.
|
|
||||||
|
|
||||||
> Question 2 : Convertissez en décimal le binaire 0110 1110 en décomposant en somme de puissances de 2.
|
|
||||||
|
|
||||||
> Question 3 : Convertissez en binaire puis décimal l'hexadécimal 0x6B, toujours avec les détails de calcul.
|
|
||||||
|
|
||||||
> Question 4 : Quelle est la plus grande valeur représentable sur un octet ? Pourquoi ?
|
|
||||||
|
|
||||||
|
|
||||||
Complément à 1 (Non mentionné en cours)
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Le complément à 1 va, ici, nous servir d'étape intermédiaire pour construire le complément à 2. Il s'agit simplement d'inverser tous les bits de la représentation binaire.
|
|
||||||
|
|
||||||
> Question 5 : Quel est le complément à 1 sur un octet, en binaire puis en hexadécimal, de 0x6B ?
|
|
||||||
|
|
||||||
|
|
||||||
Complément à 2
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Le complément à 2, comme décrit sur la page Wikipedia liée en haut de sujet, permet de représenter les entiers négatifs en faisant :
|
|
||||||
- complément à 1 de la valeur absolue
|
|
||||||
- puis +1
|
|
||||||
|
|
||||||
Avec cette norme de codage, les entiers positifs restent représentés comme dans les questions 1 à 4. Le premier bit indique le signe : 0 pour + et 1 pour -.
|
|
||||||
|
|
||||||
C'est par exemple comme ça qu'est représenté en mémoire le type "char" en C, pour un entier signé sur un seul octet.
|
|
||||||
|
|
||||||
> Question 6 : Quel est, en binaire puis en hexadécimal, le complément à 2 de 79 (toujours sur 1 octet) ? (Attention, le complément à 2 de 79 sera utilisé pour représenter -79 et non 79 !)
|
|
||||||
|
|
||||||
> Question 7 : Faîtes la somme, en calcul binaire, des représentations binaires de 79 + 78, avec un format de sortie sur un octet. Convertissez le résultat en entier décimal codé en complément à 2. Que constatez-vous ?
|
|
||||||
|
|
||||||
> Question 8 : Représentez en hexadécimal sur un octet 79, -79, -1
|
|
||||||
|
|
||||||
> Question 9 : Quelles sont les plus grandes valeurs positives et négatives représentables sur un octet ?
|
|
||||||
|
|
||||||
> Question 10 : Additionnez en binaire les nombres représentés en compléments à 2 de 66 et -79. Que pouvez-vous dire du résultat ?
|
|
Loading…
Reference in New Issue
Block a user