xl vba check if specific bits are set in long integer code example

Example 1: xl vba is specific bit set in longlong integer

'Extremely fast VBA function to test if a specified bit is set 
'within a 64-bit LongLong integer.

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

'Note: we do not inspect bit 63, the sign bit.
'Note: the LongLong data type is only available in 64-bit VBA.


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)                       '<--displays: True
MsgBox LongBitIsSet(230, 0)                       '<--displays: False
MsgBox LongBitIsSet(16384, 14)                    '<--displays: True
MsgBox LongBitIsSet(-16383, 0)                    '<--displays: True
MsgBox LongBitIsSet(&H7FFFFFFF, 0), 0)            '<--displays: True
MsgBox LongLongBitIsSet(&H7FFFFFFFFFFFFFff^, 62)  '<--displays: True
'
'
'

Example 2: excel vba check if bit is set in integer

'Extremely fast VBA function to test if a specified bit is set 
'within a 16-bit Integer.

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

'Note: we do not inspect bit 15, the sign bit.


Function IntegerBitIsSet(theInteger%, bit As Byte) As Boolean
    Static i&, b%()
    If (Not Not b) = 0 Then
        ReDim b(0 To 14)
        For i = 0 To 14
            b(i) = 2 ^ i
        Next
    End If
    If bit < 15 Then IntegerBitIsSet = theInteger And b(bit)
End Function

'------------------------------------------------------------------
MsgBox IntegerBitIsSet(255, 7)      '<--displays: True
MsgBox IntegerBitIsSet(230, 0)      '<--displays: False
MsgBox IntegerBitIsSet(16384, 14)   '<--displays: True
MsgBox IntegerBitIsSet(-16383, 0)   '<--displays: True

Tags:

Vb Example