warum bekomme ich bei dieser Bitoperation ein unerwartetes Ergebnis?

Hallo,

ich will durch eine Bit verschiebe Operation herausfinden ob an einer bestimmten Stelle einer dualen Zahlenfolge eine 1 gesetzt ist.

0000011 & (1<<3)) > 0

normalerweise funktioniert das auch (z.b. 1<<0, 1<<1,1<<2 usw.) aber bei der oben genannten Operation zeigt er mir 8 an (1000). Warum tut er das? meiner Meinung nach müsste es auch 0 sein. Ich programmierte das ganze in Javascript.

(1 votes)
Loading...

Similar Posts

Subscribe
Notify of
5 Answers
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Suboptimierer
2 years ago

1 um drei Stellen geshiftet ist 8.

Der >-Vergleich mit 0 müsste true (entspricht 1) ergeben.

Bitweise & müsste 1 ergeben.

__________

Vielleicht bist du mit der Rangfolge der Operatoren durcheinander gekommen.

https://www.programmierenlernenhq.de/java-grundlagen-rangfolge-der-java-operatoren/

Suboptimierer
2 years ago
Reply to  Suboptimierer

PS: Eine öffnende Klammer fehlt in deinem Code oder eine schließende ist zuviel.

Suboptimierer
2 years ago
Reply to  MarcF1919

Es kommt darauf an, wo die vergessene, öffnende Klammer ist. > hat eine höhere Priorität als &.

BorisG2011
2 years ago

Der in der Frage angegebene logische Ausdruck ist nicht wohlgeformt. Ich vermute, dass folgendes gemeint ist:

(0b0000011 & (1<<3)) > 0

Der Präfix “0b” sollte vor einer Dualzahl stehen.

Ganzzahlige Konstanten mit führender Null sollte man in JavaScript vermeiden, weil sie als Oktalzahlen gelesen werden können. Falls du den Präfix “0b” vergessen haben solltest, könnte das auch dein Problem sein, dann bedeutet

011 nämlich 0b0000000100000001 in Dualschreibweise.

Weitere Informationen zu den Schreibformen der Zahlen hier: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Numbers_and_dates?retiredLocale=de#binary_numbers