operateur sur les bits en lua ?

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
domoserena
Messages : 11
Inscription : 07 avr. 2016, 17:30

operateur sur les bits en lua ?

Message par domoserena »

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
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: operateur sur les bits en lua ?

Message par vil1driver »

Salut,

Code : Tout sélectionner

x = x/2²
il te faudra contraindre le résultat pour éviter le débordement..
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
domoserena
Messages : 11
Inscription : 07 avr. 2016, 17:30

Re: operateur sur les bits en lua ?

Message par domoserena »

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 ....
Répondre