Vreemd gedrag van dec() met Int64...
2009-06-25 23:04 i1756 [permalink]
Tiens, wat ik hier nu plots ontdek... Ik ben aan xxmGecko bezig, een firefox-plugin-nsIProtocolHandler. Die werkt intern dus wel eens met een stream, en om echt grote streams te kunnen ondersteunen, gebruik je dus Int64's voor Size en Position...
Nu gebruik ik ook veel inc en dec. Waarschijnlijk een overblijfsel uit mijn (heel beperkte) assemblerjeugd. Dus dacht ik dat die ook wel veilig zijn om te gebruiken met Int64's.
Nu, kreeg ik tijdens het debuggen plots dingen die vastlopen en waardes in de buurt van 4294967295 in die Int64's! Voor wie het getal niet herkent, je krijgt het als je de laagste 32 bits op 1 zet. En alle bits die op 1 springen gebeurt wel eens als je een negatief cijfer krijgt.
Dat er een negatief cijfer komt in een stream position, is nog een ander probleem dat ik moet uitzoeken, maar waarom die Int64 maar de helft van de bits gekeerd krijgt inplaats van alle 64 (en dus echt een negatief cijfer zou weergeven) lijkt me een slecht bijverschijnsel van dec te gebruiken met Int64's.
Alle dec(A,B); vervangen met A:=A-B; dus vanaf nu!