Hallo zusammen.
Seit der Umstellung von php 4.3.10 auf 4.4.4 habe ich ein Problem mit einem Script, dass bitweise Operationen auf lange Ganzzahlen ausführt.
Debuginfo php 4.3.10
a -> [11100101100011010011000101011111] <0xe58d315f> -443731617 ( [COLOR=red] -4738698913 [/COLOR] )
h -> [00000000000000001010101100100110] <0x0000ab26> 43814 ( 43814)
a xor h
a -> [11100101100011011001101001111001] <0xe58d9a79> -443704711 ( 3851262585)
Debuginfo php 4.4.4
a -> [10000000000000000000000000000000] <0x80000000> -2147483648 ( [COLOR=red] -4738698913[/COLOR] )
h -> [00000000000000001010101100100110] <0x0000ab26> 43814 ( 43814)
a xor h
a -> [10000000000000001010101100100110] <0x8000ab26> -2147439834 ( 2147527462)
Ausgabeinformationen sind die Variablen in verschiedenen Zahlensystemen, sowie der Zahlwert als Float ohne Nachkommastellen (in Klammern).
Das problem hierbei ist, dass php bei einem integer overflow den Wert intern als float ablegt was bisher jedoch kein thema war, weil die Bitweise darstellung bisher trotzdem korrekt war.
Seit 4.4.4 ist der Hex Wert jedoch 0x80000000 was eine Bitweise operation fehlerhaft macht.
Ich habe bisher alle Tricks, die mir so eingefallen sind um an den Binär korrekten Wert zu gelangen, ausprobiert und war, offensichtlich, erfolglos.
Typeconversion zu Float hat nicht geholfen, die GMP Lib gibt es für die aktuelle PHP version noch nicht.
Hat jemand eventuell eine Idee, wie ich an den korekten Binärwert gelangen kann?
Seit der Umstellung von php 4.3.10 auf 4.4.4 habe ich ein Problem mit einem Script, dass bitweise Operationen auf lange Ganzzahlen ausführt.
Debuginfo php 4.3.10
a -> [11100101100011010011000101011111] <0xe58d315f> -443731617 ( [COLOR=red] -4738698913 [/COLOR] )
h -> [00000000000000001010101100100110] <0x0000ab26> 43814 ( 43814)
a xor h
a -> [11100101100011011001101001111001] <0xe58d9a79> -443704711 ( 3851262585)
Debuginfo php 4.4.4
a -> [10000000000000000000000000000000] <0x80000000> -2147483648 ( [COLOR=red] -4738698913[/COLOR] )
h -> [00000000000000001010101100100110] <0x0000ab26> 43814 ( 43814)
a xor h
a -> [10000000000000001010101100100110] <0x8000ab26> -2147439834 ( 2147527462)
Ausgabeinformationen sind die Variablen in verschiedenen Zahlensystemen, sowie der Zahlwert als Float ohne Nachkommastellen (in Klammern).
Das problem hierbei ist, dass php bei einem integer overflow den Wert intern als float ablegt was bisher jedoch kein thema war, weil die Bitweise darstellung bisher trotzdem korrekt war.
Seit 4.4.4 ist der Hex Wert jedoch 0x80000000 was eine Bitweise operation fehlerhaft macht.
Ich habe bisher alle Tricks, die mir so eingefallen sind um an den Binär korrekten Wert zu gelangen, ausprobiert und war, offensichtlich, erfolglos.
Typeconversion zu Float hat nicht geholfen, die GMP Lib gibt es für die aktuelle PHP version noch nicht.
Hat jemand eventuell eine Idee, wie ich an den korekten Binärwert gelangen kann?
Kommentar