# Cours
pour evaluer le nombre de bit nescessaire pour représenter un nombre en complément à 2, il faut prvoir un bit suplémentaire pour le bit de signe par rapport à la repprésentation en base binaire
Ainsi, en complément à 2, on peut représenter sur N bits les varleurs entières de -2<sup>n-1</sup> à 2<sup>n-1</sup>
exemple: pour représenet -516, il faut 10 + 1 bit
2eme méthode:
Pour transformer un nombre en son complément à 2 sans poser de calcul, il suffit de garder tous les bits depuis la droite juqau'au 1er 1 compris, puis d'inverser tous ceux qui sont à gauche du 1er
## représentation des nombres réels
en informatique, les nombre non-entier sont souvent représenté en nombre à virgules flotantes, encore appelé "nombre flottant"
Compte tenu du nombre limité debits en mémoire, tous les nombres réels ne sont pas exactement représentable en binaire. Ainsi, cetains nombres réels ont une représentation binaire infinie
Exemple : 0,1<sub>10</sub> = 0,00011 00011 00011 00011 ......<sub>2</sub>
Méthode:
Pour convertir la partie décimale d'un nombre flotant de la base décimale à binaire :
1. Multiplier par 2 la partie décimale
2. La partie entière du nombre obtenu donne le prochain chiffre apres la virgule
3. Ne garder que la partie décimale du nombre obtenu et recommencer les calculs avec cette valeur tant que celle-ci n'est pas nulle
Bonne pratique : Il faut eviter de tester l'égualité sur 2 nombres flotants. exemple : 0.1+0.2 == 0.3 renvoie "false"
Certaines vertions du module "math" ou "numpy" contiennent la fonction "isclose()" permet de palier le problème de la représentaition approxiamtive d'un nombre flottant.
exemple :
```python=
from math import *
isclose(7.000001,7)
```
=> renvoie true
2eme possibilitée : récupérer la différence en valeur absolue entre
## Représentation d'un texte en machine
Afin de représenter tout type de caractères (lettres, symboles ou chiffres) il est indispensable d'utiliser un système decodage informatique, appelé encodage. L'encodage assure la corespondance entre les caracères et les nombres binaires stocké dans la mémoire de l'ordinateur. De nombreux codages co existent, parmis eux, ont peut citer :
* le codage ASCII est simple mais limité en terme de caract-ères à encoder, ce qui ne le rend pas universel. 7 bits suffisent pour coder un caractère.
* la norme ISO 8859-1 (ou Latin-1) permet d'encoder tous les caractères des principales langues européennes. Chaque caractère est codé sur 1 octet. Certains alphabets comme le **cyrillique** ou le **polonais** ont leurs propres normes.
* Le standart Unicode est universel et extensible si besoin. En revanche, il néscessite plus d'espace mémoire (4 à 6 octet par chacactère à encoder), ce qui alonge la taille du message.
* La norme UTF-8 est une représentation d'unicode dont elle possède les avantages. Cet encodage est de taille variable, ce qui lui permet d'être moin gourmand en espace mémoire qu'unicode. De plus, il est compatible avec ASCII mais plus compliquer à gerer en machine
## Le calcul booléen
**Définition** :
* une variable booléenne est une variable qui ne prend que 2 valeur : `True` ou `false`
* un opérateur booléen est un opérateur mathématique qui relie deux variable binaire ou deux expressions binaires.
* expression booléene : une expressions dont l'évaluation ne peut etre que `true` ou `false`.
* opérande : un élément sur lequel s'applique un opérateur booléen.
* table de véritée : c'est un tableau qui comporte une colone par variables d'entrée (ou opérande) et une colonne pour le résultat de l'opération appliqué aux opérandes. Puisseque les variables booléennes ne peuvent prendre que deux valeurs, on peut dresser la liste de tous les cas possibles pour chacun des opérateurs.
opérateurs and/et logiques:
- & (&&)
- Λ
- *
- and
opérateurs or/OU logique :
- ||
- V
- +
- or
opérateur not/non logique :
- not
- ~
- !
- ¬
opérateur xor/ou exclusif : (renvoi true seulement si 1 des deux est vrai)
- ⊕
- ⊻