Những người sử dụng một ngôn ngữ như VB, mà không có một cách thực sự thuận tiện của việc vô hiệu hóa kiểm tra tràn trong việc chuyển đổi, có thể sử dụng một cái gì đó như:
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
hoặc
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
Phiên bản cho 32 bit sẽ rất giống nhau. Tôi không chắc cách tiếp cận nào sẽ nhanh hơn. Những thay đổi là một chút ngớ ngẩn, nhưng họ tránh sự cần thiết cho các xét nghiệm 'nếu'.
đẹp! chỉ là những gì tôi đang tìm kiếm .. cảm ơn !! – thalm