Hi,
Ich vermute jedoch, die Antwort ist nein.
Javascript ist nicht darauf ausgelegt, auf Bit-Ebene zu adressieren und zu operieren.
ich möchte aber den HTTP-Request nicht 16x ausführen um zu erfahren, ob die einzelnen Kanäle gesetzt sind
Das wäre ja auch Unfug - hole alle 16bit auf einmal und vergleiche sie mit dem vorherigen Stand.
Ist das gesamte 16bit-Wort unverändert, ist zwangsläufig auch jedes Bit unverändert.
Ist das gesamte Wort jedoch verändert, kannst du daraus alle 16bit neu extrahieren, ohne dafür noch einen HTTP-Request loszutreten.
( ( _inCurrVal & Math.pow(2, (this.inChannel)-1) ) > 0) ? this.inCurrentValue = 1 : this.inCurrentValue = 0;
Schön, dass du den ternären Operator kennst - diese Anweisung ist dennoch maximal umständlich geschrieben. Wenn du schon den ternären Operator benutzt, ziehe die Teilausdrücke vor, die in beiden Fällen gleich sind; in deinem Fall ist das die linke Seite der Zuweisung. Außerdem ist es mit Elefanten auf Mücken geschossen, wenn du das Math-Objekt und die Potenzierung bemühst, nur um eine Bitmaske zu berechnen, die man ebensogut durch eine primitive Bitshift-Operation haben kann.
Effizienter und übersichtlicher:
this.inCurrentValue = ((_inCurrVal & (1<<this.inChannel))!=0);
Gut, so hast du nicht 1 und 0, sondern true und false - aber das ist ja letztendlich dasselbe.
Hoffe, jetzt ist es verständlicher...?
Mir war schon vorher klar, was du willst - aber das ist so nicht vorgesehen.
Ciao,
Martin
Chef zum Bewerber: Es gibt zwei Dinge, auf die ich allergrößten Wert lege. Das eine ist Sauberkeit! Haben Sie übrigens die Schuhe auf der Matte abgetreten? - Ja, selbstverständlich. - Gut. Das andere ist uneingeschränkte Ehrlichkeit. Übrigens, draußen liegt gar keine Fußmatte.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(