Ouai, et l'intérêt de l'exa c'est que c'est du binaire bien rangé.
Par exemple $FFA8 -> F F A 8 -> 15 15 10 8 -> 1111 1111 1010 1000
Et pour convertir du binaire en héxa la même mais dans l'autre sens. Bref énormément plus simple que de passer du décimal au binaire.
D'ailleurs dans le code
x = (x&$ffffffe0)+32;
x & $FFFFFFE0 s'appelle un masquage.
L'opérateur & récupère juste les bits choisis. Par exemple tu fait (x & $FF), ça te fait un (x & 11111111) -> garde les 8 premiers bits de x (je parle des bits de poids faible, a droite donc), et efface tous les autres.
Genre si tu veux savoir si un nombre est pair ou impair, tu masque juste le premier bit -> (x & 1) -> si c'est égal a 1 c'est un nombre impair.
De cette façon tu peut utiliser plusieurs booléens dans une seule variable.
Tu définis tes masques (constantes), par exemple:
WALK = 1 // 0001
JUMP = 2 // 0010
HIT = 4 // 0100
SHOOT = 8 // 1000
Et maintenant tu peut utiliser une variable state de cette façon:
// set
state = WALK | SHOOT // 1001
// get
if(state & WALK) // 000x
{
<action>
}
Malheureusement sous GM ça permet pas d'économiser beaucoup de mémoire, vu que rien que tes masques prennent de la place.
En C++ tes masques prennent que dalle si tu utilise des constantes.
En revanche ça permet de faire des trucs avancés, et de mieux organiser certaines parties de son code.
Pour gagner de la mémoire ça pourrais être utile quand tu as un grand tableau d'états par exemple, tu gagnerais avec le code précédents 4x plus de place.