bonjour,
j'ai besoin dans un 'event' de travailler sur les bits d'un nombre mais je n'arrive pas à trouver les opérateurs en lua qui fonctionnent ....
J'ai essayé x >> 2 pour décaler à droite de 2 bits, x & 128 pour faire un and entre 2 valeurs, ou | pour le ou mais visiblement ca ne marche pas.
D'après les docs lua sur le net ces opérateurs 'bitwises' devraient pourtant exister.
si je fais
b = 255 & 128
print ( b)
j'ai comme erreur Error: EventSystem: in test: [string "--..."]:28: unexpected symbol near '&'
Ca parait basique comme problème mais je trouve pas.
une idée ?
merci
operateur sur les bits en lua ?
-
vil1driver
- Messages : 5661
- Inscription : 30 janv. 2015, 11:07
- Localisation : Rennes (35)
Re: operateur sur les bits en lua ?
Salut,
il te faudra contraindre le résultat pour éviter le débordement..
Code : Tout sélectionner
x = x/2²MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua
Un ex domoticzien
-
domoserena
- Messages : 11
- Inscription : 07 avr. 2016, 17:30
Re: operateur sur les bits en lua ?
pour le decalage c'est ok à condition de ne prendre que la partie entiere du resultat.
Je voulais surtout connaitre l'etat d'un bit specifique d'un hexa. Comme j'ai pas trouvé les fonctions de base pour faire ca j'ai développé un bout de code :
function round(x)
return x>=0 and math.floor(x+0.5) or math.ceil(x-0.5)
end
function etat(val,no)
x=2^no
val=round(val / 2^no)
if (val % 2 == 0) then
etat1=0
else
etat1=1
end
return etat1
end
exemple : etat(x,5) donne la valeur du 5ème bit (commence à 0)
Ca fait un peu usine a gaz mais j'ai pas trouvé plus simple ....
Je voulais surtout connaitre l'etat d'un bit specifique d'un hexa. Comme j'ai pas trouvé les fonctions de base pour faire ca j'ai développé un bout de code :
function round(x)
return x>=0 and math.floor(x+0.5) or math.ceil(x-0.5)
end
function etat(val,no)
x=2^no
val=round(val / 2^no)
if (val % 2 == 0) then
etat1=0
else
etat1=1
end
return etat1
end
exemple : etat(x,5) donne la valeur du 5ème bit (commence à 0)
Ca fait un peu usine a gaz mais j'ai pas trouvé plus simple ....