5/ Que veut dire "octets" dans ce cas là ? Prenons l'exemple d'un SMALLINT qui est normalement stocké sur 2 octets... ce qui donne 65 535 possbilités. Cela veut dire que si on stocke le chiffre "3"... cela va prendre autant de place que le chiffre "65 533", soit 2 octets dans les 2 cas ?
Exactement, car sinon tu n'as aucun moyen de savoir où finit ton chiffre. Je vais prendre un exemple sur un octet.
3d = 00000011b
Comme c'est sur 8 bits, tu sais que c'est bien 6 "0" devant.
Maintenant imaginons tu peux te dire "bah il suffit de mettre jusqu'au 1 qui est précédé d'un 0
Alors comment tu codes 10 étant donné que 10d = 00001010b
Si on prenait la règle que je viens d'énoncer, tu aurais que 10b, non 1010b, ça vaudrait 2 et plus 10
Donc voilà c'est notemment une des raisons que la taille soit figée, et puis s'il fallait tout le temps regarder le bit d'avant pour savoir si le nombre est fini, ce serait bcp plus long!
Mais sache que c'est pas la seule manière de coder des nombres, il y a aussi le code gray et le bcd (binaire codé décimal), je te laisse google si tu veux plus d'infos
Ex : code gray sur 3 bits :
0d = 000g
1d = 001g
2d = 011g
3d = 010g
4d = 110g
5d = 111g
6d = 101g
7d = 100g
Le but de ce code est de ne changer qu'un bit entre chaque nombre, et jamais celui qui vient de changer et toujours le plus petit possible
Pour le bcd c'est plus simple : un nombre est représenté par ses chiffres codés sous 4 octets :
Ex : 123d = 0001 0010 0011bcd
Pourquoi 4 ? Car le plus grand chiffre est 9d et que 9d en binaire est 1001b
6/ Par rapport à la question précédente, le "65535 possbilités"... cela veut dire que si on souhaite stocker le chiffre "65540", cela ne passera
pas en SMALLINT ? Le "possibilité" correspond au nombre maximal stockable ?
Je vais reprendre un peu la réponse déjà fournie et la compléter
Tout d'abord, en signé 65535 possibilités signifie que tu vas de -32768 à +32767 avec le 0 compris
avec :
32767d = en signé 01111111 11111111b
-32768d = en signé 10000000 00000000b
Ensuite, si tu lui donnes par exemple +32768 (1 de plus que la limite) que vas-t-il faire ?
Ca dépend les langages ! (je ne sais pas pour mysql)
Il y a 2 possibilités :
1) une erreur
2) plus compliqué à comprendre, ce qu'on appelle un dépassement:
Le premier bit est le bit de signe 0 = positif, le reste est la valeur (quand on est en positif !!! en négatif, cela ne fonctionne pas ainsi, il faut faire le complément à 2)
Bon, on va faire une addition binaire pour arriver à notre 32768d = 32767d + 1d = 01111111 11111111b + 1b
Cela suit les mêmes règles d'additions qu'en décimal, donc ça donne 10000000 00000000b et bim, on se retrouve avec un nombre négatif qui vaut la valeur minimale, c'est-à-dire -32768d
C'est-à-dire : les entiers sont cycliques
Bon j'espère avoir répondu à tes 2 questions en profondeur ;) Pour la 6, je te laisse tester sur mysql au moins tu auras l'explication !