excelvba check if bit is set in 64-bit longlong integer code example
Example 1: vba long integer value to bits
Function LongToBits$(ByVal n&)
Dim i&
LongToBits = "00000000000000000000000000000000"
If n And &H80000000 Then
Mid$(LongToBits, 1, 1) = "1"
n = n And Not &H80000000
End If
For i = 32 To 2 Step -1
If n And 1 Then Mid$(LongToBits, i, 1) = "1"
n = n \ 2
Next
End Function
MsgBox LongToBits(0)
MsgBox LongToBits(293781237)
MsgBox LongToBits(-1)
Example 2: excel vba last byte from INTEGER
LoByte = n And &HFF
HiByte = (n And &HFF00&) \ &H100
Example 3: vba bits to integer
Function BitsToInteger%(bits$)
Dim i&
Static b() As Byte
If LenB(bits) > 32 Then Exit Function
If LenB(bits) = 32 Then
b = bits
Else
b = String$(16 - Len(bits), "0") & bits
End If
For i = 2 To 30 Step 2
BitsToInteger = 2 * BitsToInteger Or (b(i) Xor 48)
Next
If (b(0) Xor 48) Then BitsToInteger = BitsToInteger Or &H8000
End Function
MsgBox BitsToInteger("1111111111111111")
MsgBox BitsToInteger("0111111111111111")
Example 4: xl vba is specific bit set in longlong integer
Function LongLongBitIsSet(theLongLong^, bit As Byte) As Boolean
Static i&, b^()
If (Not Not b) = 0 Then
ReDim b(0 To 62)
For i = 0 To 62
b(i) = 2 ^ i
Next
End If
If bit < 63 Then LongLongBitIsSet = theLongLong And b(bit)
End Function
MsgBox LongBitIsSet(255, 7)
MsgBox LongBitIsSet(230, 0)
MsgBox LongBitIsSet(16384, 14)
MsgBox LongBitIsSet(-16383, 0)
MsgBox LongBitIsSet(&H7FFFFFFF, 0), 0)
MsgBox LongLongBitIsSet(&H7FFFFFFFFFFFFFff^, 62)
Example 5: excel vba is bit set long
Function LongBitIsSet(theLong&, bit As Byte) As Boolean
Static i&, b&()
If (Not Not b) = 0 Then
ReDim b(0 To 30)
For i = 0 To 30
b(i) = 2 ^ i
Next
End If
If bit < 31 Then LongBitIsSet = theLong And b(bit)
End Function
MsgBox LongBitIsSet(255, 7)
MsgBox LongBitIsSet(230, 0)
MsgBox LongBitIsSet(16384, 14)
MsgBox LongBitIsSet(-16383, 0)
MsgBox LongBitIsSet(&H7FFFFFFF, 0)