Code : Tout sélectionner
Byte.b = ...
ByteNonSigne.l = $FF & Byte
Code : Tout sélectionner
Word.w = ...
ByteNonSigne.l = $FFFF & Word
Pour extrapoler, il suffit de faire un "$FF & ValeurSigne" avec $FF qui augmente en fonction du nombre de byte de la variable
Pourquoi mon astuce retire le signe ?
Prenons un exemple avec une variable 8bits signé
00000000 vaut 0
00000001 vaut 1
01111111 vaut 127
10000000 vaut -128 (et 128 en non signé)
11111111 vaut -1 (et 255 en non signé)
donc si le bit de rang le plus élevé (donc le premier) est à 1, on a une valeur signé.
Quand on a une valeur signé, pour connaître sa valeur, on inverse tout les bit et on ajoute 1
Exemple:
10000000
on inverse
01111111 = 127
127 + 1 = 128
donc -128
Quand je fais
Long.l = %10000000 = -128
j'otients Long = 11111111 11111111 11111111 10000000 = -128
et si je fais
Long & $FF
soit
11111111 11111111 11111111 10000000 & 00000000 00000000 00000000 11111111
il reste 00000000 00000000 00000000 10000000 soit 128 qui correspond à la valeur non signé