@flaith:
Le bit 7 correspond donc au signe, les valeurs varient de 11111111 à 01111111 (-127 à + 127) mais il est vrai que cela reste assez flou car c'est une arithmétique assez longue à expliquer
Je ne veux pas jouer le pointilleux. Je vais juste apporter une petite correction (m'en veux pas c'est pour etre pile au bit près dans ta def qui est vrai):
Pour assimiler l'arithmétique, voici un rappel récap. sur 4 bits:
F 1111 15 -1
E 1110 14 -2
D 1101 13 -3
C 1100 12 -4
B 1011 11 -5
A 1010 10 -6
9 1001 9 -7
8 1000 8 -8
7 0111 7 7
6 0110 6 6
5 0101 5 5
4 0100 4 4
3 0011 3 3
2 0010 2 2
1 0001 1 1
0 0000 0 0
(Hexa, binaire, décimal non signé et décimal signé)
ça permet de se repérer efficacement avec le 0 et le 8 (ou -8 : borne mini) qui sont des arrondis facilement mémorisables.
La borne mini (ici -8 en signé) c'est le 1er nombre du domaine de def (de -8 à 7)
La borne maxi (ici 7 en signé)c'est le dernier nombre.
Si on se munit d'une calculette pour chercher la suite des doubles (puissances de 2):
0 1
1 2
2 4
3 8
4 16
5 32
6 64
7 128
8 256
9 512
10 >> 1024 (le millier env.)
11 2048
12 4096
13 8192
14 16384
15 32768
16 65536
17 131072
18 262144
19 524288
20 >> 1048576 (le millions !)
21 2097152
22 4194304
23 8388608
24 16777216
25 33554432
26 67108864
27 134217728
28 268435356
29 536870912
30 >> 1073741824 (le milliard)
31 2147483648
32 4294967296
Si on apprend par coeur les puissances 7, 8, 15, 16, 31 et 32 (pour le 8, 16 et 32 bits), + la logique ci-dessous (1er pair, dernier impair), on a tous les domaines signés et non signés en tête.
Nombre non signé de 8 bits
ConvT: Le 1er bit n'est pas le bit 1 mais le bit 0 (en Asm, 0 est quasiment toujours considéré dans n'importe quel ensemble numérique).
[ 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 ]
Domaine de définition du comptage des combinaisons: de 1 à 256
(car 256 = 2^8)
Domaine de définition appliqué: de 0 à 255
0 --------------- - - - - - - ------------------ 255
(on décrémente les bornes parce qu'on considère le zéro : de 1
- 1 à 256
- 1)
Rem: Dans une liste de n entiers consécutifs avec n pair (ici 256 est pair)
> Si le 1er entier est impair, le dernier est pair
> A l'inverse, si le 1er est pair, le dernier est impair (et c'est cette règle qu'on va retenir)
> En bref: Les domaine de déf des entiers commence toujours par un entier pair (en référence à 0 qui est pair)
Nombre signé de 8 bits:
Comme le dernier bit sert de signe, il reste 7 bits et on considère alors que le domaine est décalé de 2^7 unités soit 128 unités vers la bas.
Domaine de définition appliqué: de -128 à 127
-128 -------- - - - - - - -------- 0 ------- - - - - - - ------ 127
(on décrémente les bornes de 128 : de 0
- 128 à 255
- 128)
Rem: Comme défini en rem. préc., ce domaine comme tous les autres domaines (sur 16, 24, 32bits, etc...) commence par un pair et finit par un impair.
111 1111 (127) Dernier nombre (borne maxi)(il est impair)
111 1110 (126) Avant-dernier nombre
111 1101 (125)
...
11 (3)
10 (2)
1 (1)
0 (0)
1111 1111 (-1)
1111 1110 (-2)
1111 1101 (-3)
...
1000 0010 (-126)
1000 0001 (-127)
1000 0000 (-128) (1er nombre)(borne mini)(il est pair)
Conclusion : En binaire, le domaine de déf exact sur 8bits est de 1000 0000 à 0111 1111.
Exemple: En extrapolant sur les 16, 24 et 32 bits, formats qui nous intéressent en assembleur, si je prends par exemple 32bits.
J'ai en tête 2^32 = 4294967296 (C'est comme les numéros de téléphone pour les savoir par coeur : celui-ci c'est "4, 29, 4 96, 72, 96")
Je le soustrait de 1.
Je sais donc presqu'immédiatement qu'un non signé de 32bits peut représenter un nombre entre 0 et 4294967295

Et si je veux savoir le domaine d'un entier signé 32bits, au lieu de 2^32, je prends 2^31, qui fait 2147483648 ("21, 47, 48, 36, 48"), et j'en conclus qu'un signé 32bits est entre -2147483648 et 2147483647 (j'enlève juste 1 à la borne maxi du domaine de def.).
Woilà, comme ça, c'est un peu moins flou en Asm![/quote]