aboutsummaryrefslogtreecommitdiff
path: root/semestre 2/informatique/2- Code binaire, mémoire, pointeurs.md
blob: fa8979cd73a018f0a1ce59c03934b770be7eee9d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
---
tags:
  - sorbonne
  - informatique
semestre: 2
---
## Architecture de von Neumann
Ordinateur est composé d'un processeur, d'une mémoire et de périphériques
![[computer_architecture_simplified.png]]
![[computer_architecture_detailled.png]]

Registres = mémoire interne au CPU

Unité de base = octet (8 bits)

**Organisation de la mémoire :**
![[ram_organisation_schema.png]]

Les tensions électriques pour la valeur binaire 1 = 5 V ou 3.3 V ou 1.65 V
|> compliqué de descendre plus bas que 1 V à cause de la tension de seuil du silicium
Les tensions électriques pour la valeur binaire 0 = 0 V

On peut ensuite calculer des choses :
|> $1010 \land 0011 = 0010$ (bool)
|> $1010 + 0010 = 1100$ (binaire)

Souvent, on représente la mémoire avec un tableau de 4 colonnes avançant de 4 en 4

Pour représenter les floatants, on les décompose en 3 parties :
- signe
- mantisse
- exposant

Après on peut les approximer à l'aide des sommes d'inverses de 2 ($\frac{1}{2}+\frac{1}{4}+\cdots$)
Exemple sur $-50.5$ :
- $2^5+2^4+2^1+2^{-1}$
- $(2^0+2^{-1}+2^{-4}+2^{-6})\times 2^{5}$
- la somme est la mantisse et la multiplication est l'exposant

Chaque octet a une adresse unique !
## Portée des variables
Globale = disponible partout dans le fichier
Paramètre = disponible dans toute la fonction
Locale = disponible dans le bloc

Le shadowing existe en C
## Pointeurs
On peut mettre une valeur et une adresse en mémoire
|> valeur est une valeur classique
|> une adresse est une zone de la mémoire contenant une valeur

Une variable qui contient une adresse est un pointeur
```c
int *n;
```

ici, `n` contient l'adresse vers un entier

On récupère l'adresse avec l'opérateur `&`
```c
int x = 0;
int *p;
p = &x;
printf("%t %d", p, *p);
```

On peut afficher l'adresse avec `printf("%t", n)`
On peut afficher le contenu du pointeur avec `*n`