Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

Bitweise verschiebung mit Javascript nur bis zum 32sten Bit???

Benjamin Blümchen / 6 Antworten / Baumansicht Nickles

Hallo,
ich hab mal eine Frage zur Bitweisen verschiebeung unter Javascript, also dem Mein Problem ist, das ich das Bitweise UND (also &) für Zahlen benutzen will die mehr als 32 bit haben. Irgendwie Klappt das aber nicht.
Bin für jeden Tipp dankbar!!!!

Mfg,
BB

bei Antwort benachrichtigen
Borlander Benjamin Blümchen „Bitweise verschiebung mit Javascript nur bis zum 32sten Bit???“
Optionen
warum kann ich dann z.B. 2147483648*4 rechnen und es kommt ein Ergebnis raus????
Wird dann vermutlich in float/double (u.U. heißt der Typ in JS auch anderes) konvertiert (mit diesen Typen lassen sich größere Zahlenbereiche darstellen, nur u.U. nicht mehr so genau)...

Mein Problem ist, das ich das Bitweise UND (also &) für Zahlen benutzen will die mehr als 32 bit haben.
Wozu brauchst Du das und lässte sich das Problem nicht u.U. auf mehrere Integers aufsplitten?


Gruß
Borlander
bei Antwort benachrichtigen
Benjamin Blümchen Borlander „Antwort“
Optionen

Ich habe ein Script, das mit einer Art Rechtesystem arbeiten soll, Jedes Bit in einer integerzahl repräsentiert dabei eine andere Berechtigung. Allerdings brauche ich dummerweise etwas mehr als 32 verschiedene Rechte-Falgs. Mit den Bits kann man halt so schön & bzw. | benutzen, womit man ganz einfach abfragen kann welche Rechte der aktuelle Benutzer besitzt.

Gruß,
BB

bei Antwort benachrichtigen
mr.escape Benjamin Blümchen „Antwort“
Optionen

Wenn die bits verschiedene rechte darstellen, solltest du keine verschiebung brauchen (die position sollte ja gleich bleiben, damit eine berechtigung leicht getestet werden kann) und damit ist eine aufsplittung in mehrere teile kein problem (stell dir vor, wir würden noch alles in z.b. 8-bit machen, da müsste es auch eine lösung geben!).
Es gibt aber noch eine zweite, bedenkliche sache. Rechteverwaltung mit javascript ist nicht wirklich der brüller, clientseitige daten/programme sind sehr leicht zu manipulieren.

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen
Benjamin Blümchen mr.escape „Antwort“
Optionen

:) nene das is keine eigentliche Rechteverwaltung, das kleine Script kreuzt mir nurn paar Checkboxen an, die wiederrum für bestimmte Rechte stehn. Ich brauch eigentlich auch nicht die Verschiebung, sondern das logische UND (&), bei dem isses auch so, dass es nur für 32 bit funzt.
Hab mein Problem jetzt anders gelöst. Trotzdem denke für eure Hilfe!!!!!

Gruß,
BB

bei Antwort benachrichtigen
vergisses Benjamin Blümchen „Bitweise verschiebung mit Javascript nur bis zum 32sten Bit???“
Optionen

Hallo,

Deine Zahl ist 32Bit und damit implizit vom Datentyp Integer.

Bei der Multiplikation wird eine implizite Typkonvertierung nach
Long ausgeführt und das Ergebnis ist OK.

Bei der Bitverschiebung bleibt der Datentyp erhalten und
damit ist das Ergebnis 0.
Du musst Deine Zahl explizit als Long definieren "2147483648L",
dann sollte alles OK sein.
(Ich habs nicht getestet...)
Siehe auch unter
http://java.sun.com/docs/books/jls/second_edition/html/expressions.doc.html#5121

Gruss, vergisses

bei Antwort benachrichtigen
mr.escape vergisses „Hallo, Deine Zahl ist 32Bit und damit implizit vom Datentyp Integer. Bei der...“
Optionen

Für eine sekunde dachte ich auch an long, aber nur für eine sekunde.
Aber: JavaScript!=Java.

mr.escape

"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen