excel vba check if specific bits are set in int32 code example

Example 1: excel vba are bits set in long

'Fast VBA function to test if specific bits are set 
'within a 32-bit Long integer. If ALL specified bits are set then 
'this function returns True. If ANY of the specified bits are
'not set then this function returns False.

'Bits are numbered from 0 to 31, so the first (least significant) bit
'is bit 0.

'Note: bits can be specified in any order.
'Note: any number of bits can be specified in one call.


Function LongBitsAreSet(theLong&, ParamArray bits()) As Boolean
    Static i&, b&()
    If UBound(bits) = -1 Then Exit Function
    If (Not Not b) = 0 Then
        ReDim b(0 To 30)
        For i = 0 To 30
            b(i) = 2 ^ i
        Next
    End If
    For i = 0 To UBound(bits)
        If bits(i) < 0 Then Exit Function
        If bits(i) > 30 Then Exit Function
        If (theLong And b(Int(bits(i)))) = 0 Then Exit Function
    Next
    LongBitsAreSet = True
End Function


'---------------------------------------------------------------------------------------------------------------------
MsgBox LongBitsAreSet(255, 7)                    '<--displays: True          255 = 00000000 00000000 00000000 11111111
MsgBox LongBitsAreSet(230, 0)                    '<--displays: False         230 = 00000000 00000000 00000000 11100110
MsgBox LongBitsAreSet(85, 0, 2, 6, 4)            '<--displays: True           85 = 00000000 00000000 00000000 01010101
MsgBox LongBitsAreSet(85, 0, 2, 5, 4)            '<--displays: False          85 = 00000000 00000000 00000000 01010101
MsgBox LongBitsAreSet(485, 2, 7, 5)              '<--displays: True          485 = 00000000 00000000 00000001 11100101
MsgBox LongBitsAreSet(24585, 14, 13, 3)          '<--displays: True        24585 = 00000000 00000000 01100000 00001001
MsgBox LongBitsAreSet(&H7D12EACB, 24, 26, 30, 7) '<--displays: True   2098391755 = 01111101 00010010 11101010 11001011 
'
'
'

Example 2: excel vba are bits set in byte

'Fast VBA function to test if specific bits are set 
'within a Byte. If ALL specified bits are set then this function
'returns True. If ANY of the specified bits are not set then
'this function returns False.

'Bits are numbered from 0 to 7, so the first (least significant) bit
'is bit 0.

'Note: bits can be specified in any order.


Function ByteBitsAreSet(theByte As Byte, ParamArray bits()) As Boolean
    Static i&, b() As Byte
    If UBound(bits) = -1 Then Exit Function
    If (Not Not b) = 0 Then
        ReDim b(0 To 7)
        For i = 0 To 7
            b(i) = 2 ^ i
        Next
    End If
    For i = 0 To UBound(bits)
        If bits(i) < 0 Then Exit Function
        If bits(i) > 7 Then Exit Function
        If (theByte And b(Int(bits(i)))) = 0 Then Exit Function
    Next
    ByteBitsAreSet = True
End Function


'--------------------------------------------------------------------------
MsgBox ByteBitsAreSet(255, 7)           '<--displays: True   255 = 11111111
MsgBox ByteBitsAreSet(230, 0)           '<--displays: False  230 = 11100110
MsgBox ByteBitsAreSet(85, 0, 2, 6, 4)   '<--displays: True    85 = 01010101
MsgBox ByteBitsAreSet(85, 0, 2, 5, 4)   '<--displays: False   85 = 01010101
'
'
'

Example 3: excel vba set bit in byte

'Extremely fast VBA function to test if a specified bit is set 
'within a Byte.

'Bits are numbered from 0 to 7, so the first (least significant) bit
'is bit 0.

Function ByteBitIsSet(theByte As Byte, bit As Byte) As Boolean
    Static i&, b() As Byte
    If (Not Not b) = 0 Then
        ReDim b(0 To 7)
        For i = 0 To 7
            b(i) = 2 ^ i
        Next
    End If
    If bit < 8 Then ByteBitIsSet = theByte And b(bit)
End Function

'------------------------------------------------------------------
MsgBox ByteBitIsSet(255, 7)      '<--displays: True
MsgBox ByteBitIsSet(230, 0)      '<--displays: False

Tags:

Vb Example