Skriptsprachen (PHP, Javascript, etc.) - Forum

Derzeit sind Sie als Gast in unserem Forum aktiv. Für das Schreiben registrieren Sie sich bitte. Unser Forum ist eine Austauschplattform für Webworker zum Kommunizieren, Helfen, Informieren und Hilfe finden. Auf der rechten Seiten finden Sie eine Forenübersicht über alle Bereiche des Webmaster-Forums. Unterhalb finden Sie alle aktuellen Themen.

Diskutieren Sie hier über die serverseitige Skriptsprachen PHP und Python und über dynamische Webseitenerstellung mit Javascript und Ajax.


niklas
Beiträge: 153

PN schreiben
Profil ansehen
User ist offline

Fehler bei Binärumwandlung

Link zur Antwort auf "Fehler bei Binärumwandlung" von niklas niklas, am Freitag den 18.04.2008 um 19:23:51

Leider funktioniert die Umwandlung in eine Binärzahl ab 2^32 nicht mehr :( Ich nutze das System für ein Rechtemanagment und durch das unerwartete Verhalten kommt es zu Problemen, nutzt man mehr als verschiedene 31 Rechte.

Hat jemand eine Idee, wie das Problem zustande und vor allem zu beheben ist?

0 = 1=1
1 = 2=10
2 = 4=100
3 = 8=1000
4 = 16=10000
5 = 32=100000
6 = 64=1000000
7 = 128=10000000
8 = 256=100000000
9 = 512=1000000000
10 = 1024=10000000000
11 = 2048=100000000000
12 = 4096=1000000000000
13 = 8192=10000000000000
14 = 16384=100000000000000
15 = 32768=1000000000000000
16 = 65536=10000000000000000
17 = 131072=100000000000000000
18 = 262144=1000000000000000000
19 = 524288=10000000000000000000
20 = 1048576=100000000000000000000
21 = 2097152=1000000000000000000000
22 = 4194304=10000000000000000000000
23 = 8388608=100000000000000000000000
24 = 16777216=1000000000000000000000000
25 = 33554432=10000000000000000000000000
26 = 67108864=100000000000000000000000000
27 = 134217728=1000000000000000000000000000
28 = 268435456=10000000000000000000000000000
29 = 536870912=100000000000000000000000000000
30 = 1073741824=1000000000000000000000000000000
31 = 2147483648=10000000000000000000000000000000
32 = 4294967296=0
33 = 8589934592=0
===
Quellcode:
$len = 35;
for ($i = 0; $i < $len; $i++) {
$pow = pow(2,$i);
echo $i." = ".$pow."=".decbin($pow)."<br>";
$a = $a+$pow;
} s

Link zur Antwort auf "Fehler bei Binärumwandlung" von Firebird  Firebird , am Freitag den 18.04.2008 um 19:49:08

Anscheinend kann PHP nur 4 Byte Werte bei der Umwandlung. Probieres mit einer der Mathebibliotheken :)


niklas
Beiträge: 153

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "Fehler bei Binärumwandlung" von niklas niklas, am Freitag den 18.04.2008 um 20:16:56

ich fürchte da brauche ich ein wenig mehr hilfe... :/


sTaX
Beiträge: 1

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "Fehler bei Binärumwandlung" von sTaX sTaX, am Freitag den 18.04.2008 um 20:33:56

Ich würde sagen, dass du das Script auf einen 32Bit Rechner ausführst.

Dieser kann nur mit max. 32Bit rechnen(4Byte). D.h. bei 2^32 ist Schluss.

Link zur Antwort auf "Fehler bei Binärumwandlung" von Firebird  Firebird , am Freitag den 18.04.2008 um 20:54:09

Das wiederum ist halbrichtig...

 
Python Consolenlog
1
2
3
4
>>> x = Decimal(2)
>>> x **= 1000
>>> x
Decimal("10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376")

Das macht mein Rechner stressfrei mit. Trotz 64 Bit.

-> Sobald die Bits des Prozessors nicht mehr ausreichen, gleichen Bibliotheken das aus.

Und das nicht nur bei höheren Sprachen wie hier Python, auch C auf 32 Bit Systemen kann z.B. long long Typen.


C S
Beiträge: 199

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "Fehler bei Binärumwandlung" von C S C S, am Freitag den 18.04.2008 um 21:18:21

Eigenen Algorithmus schreiben? Hier meine Version, ist aber in C...

Input ist eine Zahl n, die Basis b in die man Umwandeln möchte; Output ist ein String...

 
Text
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
void convert(long long n, char *c, unsigned int b) {
        unsigned int i = 0, r;

        while(n>0) {
                r = n%b;
                n = (n-r)/b;

                c[i++] = get_digit(r);
        }

        c[i] = '\0';

        reverse(c);
}

Wieso kann man hier als "Sprache" (bei Codeblöcken) nichts eigenes eingeben?

Insgesamt 1 mal bearbeitet, zuletzt am 19.04.2008 um 12:11:04

niklas
Beiträge: 153

PN schreiben
Profil ansehen
User ist offline
Link zur Antwort auf "Fehler bei Binärumwandlung" von niklas niklas, am Samstag den 19.04.2008 um 19:33:30

Klingt alles logisch. Danke für die kompetente Hilfe ^_^ :)