blob: cf812530ac0dd2b5a5e3dd859beb92c9f9179a59 (
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
69
70
|
---
tags:
- sorbonne
- informatique
- architecture-des-ordinateurs
- td
semestre: 3
---
$127_d$ prend 7 bits
$32_d$ prend 6 bits (car le nombre max dans $n$ bits est $2^n-1$ !)
Un mot hexa de taille $n$ permet de coder $16^n$ valeurs, soit toutes les valeurs entières dans $[0;16^n-1]$
| Mot binaire de 8 bits | Décimal | Mot hexa de 8 bits |
| --------------------- | ------- | ------------------ |
| `0b0000 1010` | 10 | `0x0A` |
| `0b0000 0010` | 2 | `0x02` |
| `0b0001 0000` | 16 | `0x10` |
| `0b0011 1001` | 57 | `0x3B` |
| `0b1000 0001` | 127 | `0x81` |
| `0b0001 0111` | 23 | `0x17` |
| `0b0101 1011` | 91 | `0x5B` |
| `0b0010 1001` | 41 | `0x29` |
| `0b1010 1010` | 170 | `0xAA` |
$5B_h+17_h = 72_h$ -> 7 bits
$71_h+B5_h = 126_h$ -> 9 bits
`0x2B` + `0x95` = `0xC0` -> pas de dépassement en interprétation « entier naturel »
`0xC8` + `0x6D` = `0x35` -> dépassement en interprétation « entier naturel »
`0x8B57` + `0xA34F` = `0x2EA6` -> dépassement en interprétation « entier naturel »
`0b1001 0011` - `0b1010 0011` = `0b1111 0000` -> dépassement en interprétation « entier naturel »
`0b1100 1111` - `0b1011 0011` = `0b0001 1100` -> pas de dépassement en interprétation « entier naturel »
`M1 & M2` = `0b1000`
`M1 | M2` = `0b1101`
`~M1` = `0b0110`
`M1 ^ M2` = `0b0101`
`M3 & 0x0000 FF00`
`M3 ^ M3 = 0x0000 0000`
`M3 ^ 0x0000 00FF` -> permet d'inverser les bits 0 à 7 (i.e. les 8 premiers)
`M7` = `0b01010011`
`M7 << 1` = `0b10100110`
`M7 << 2`= `0b01001100`
`M7 >> 4`= `0b00000101`
`<<` réduit le nombre entier naturel et `>>` l'augmente !
| Base 16 | Signe | Base 2 | Opposé base 2 | Opposé base 16 |
| -------- | ----- | ----------------------- | ----------------------- | -------------- |
| `0x0B24` | + | `0b0000 1011 0010 0100` | `Ob0111 0100 1101 1100` | `0x74DC` |
| `0xABCD` | - | `0b1010 1011 1100 1101` | `0b0101 0100 0011 0011` | `0x5433` |
| `0xFFFF` | - | `0b1111 1111 1111 1111` | `Ob0000 0000 0000 0001` | `0x0001` |
`0b01101001` + `0b10000000` = `0b11101001`
|> est valide pour des naturels (pas de retenu sortante)
|> est valide pour des relatifs (les deux dernières retenues sont identiques)
`0b0110` + `0b0100` est valide en naturel, mais pas en relatif
`127 - 128 = -1` -> pas de dépassement
`120 - (- 150) = 270 > 127` -> dépassement de capacité
`-64 + 127 + 1 = 64` -> pas de dépassement de capacité
|> on n'aurait pas pu réaliser `-64 + 128` directement car 128 ne rentre pas sur 8 bits
|> si on avait fait `opposer(64 - 128)`, on aurait pu le faire
`0xFF` sur 32 bits, c'est `0xFFFFFFFF`
|> sa valeur en décimal (relatif en complément à 2), c'est $-1_d$
|> si c'est un naturel, c'est plus du tout la même chose !
|