Diejenigen, die eine Sprache wie VB, der Überlauf während der Konvertierung keine wirklich bequeme Möglichkeit haben Kontrollen zu deaktivieren, so etwas wie verwenden:
Shared Function unsToSign64(ByVal val As UInt64) As Int64
If (val And &H8000000000000000UL) 0 Then Return CLng(val Xor &H8000000000000000UL) Xor &H8000000000000000 Else Return CLng(val)
End Function
Shared Function signToUns64(ByVal val As Int64) As UInt64
If val < 0 Then Return CULng(val Xor &H8000000000000000) Xor &H8000000000000000UL Else Return CULng(val)
End Function
oder
Shared Function unsToSign(ByVal val As UInt64) As Int64
Return CLng(val And &H7FFFFFFFFFFFFFFFUL) + (CLng(-((val And &H8000000000000000UL) >> 1)) << 1)
End Function
Shared Function signToUns(ByVal val As Int64) As UInt64
Return CULng(val And &H7FFFFFFFFFFFFFFF) + (CULng(-((val And &H8000000000000000) >> 1)) << 1)
End Function
Versionen für 32 Bits wären sehr ähnlich. Ich bin mir nicht sicher, welcher Ansatz schneller wäre. Die Verschiebungen sind ein wenig albern, aber sie vermeiden die Notwendigkeit für "wenn" Tests.
schön! genau das, was ich gesucht habe .. danke !! – thalm