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 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/
PS: Eine öffnende Klammer fehlt in deinem Code oder eine schließende ist zuviel.
verstehe ich nicht meiner Meinung nach ist 0000011 & 1000 = 0000000 oder was rechnet er da?
Es kommt darauf an, wo die vergessene, öffnende Klammer ist. > hat eine höhere Priorität als &.
Der in der Frage angegebene logische Ausdruck ist nicht wohlgeformt. Ich vermute, dass folgendes gemeint ist:
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