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
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
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
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
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
:) 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
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
Für eine sekunde dachte ich auch an long, aber nur für eine sekunde.
Aber: JavaScript!=Java.
mr.escape