Found this in some third-party code I've been asked to maintain:
Public Shared Function GetBitNr(ByVal TestInteger As Integer, ByVal Nr As Integer) As Integer If TestInteger < 0 Then If Nr = 32 Then Return 1 End IfTestInteger = TestInteger + CInt(&H80000000)
End If
Dim i As Long = 30
Dim str As String = ""
Do While (i > -1)
If 2 ^ i <= TestInteger Then
str = str & "1"
TestInteger = CInt(Math.Round(TestInteger - 2 ^ i))
ElseIf Left(str, 1) = "1" Then
str = str & "0"
End Ifi = i - 1
Loop
Dim result As Integer
If Len(str) >= Nr Then
result = CInt(Mid(str, Len(str) - Nr + 1, 1))
Else
result = 0
End IfReturn CInt(result)
End Function
Because testing whether a bit is set is so difficult!