특정 비트가 int32excel 에서 설정되었는지 vba 확인

코드 예제

26
0

xl vba 는 longlong 정수로 설정된 특정 비트입니다

'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
'
'
'



25
0

특정 비트가 int32excel 에서 설정되었는지 vba 확인

'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 
'
'
'


22
0

excel vba 비트가 정수로 설정되어 있는지 확인

'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




다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
English
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................
Балгарскі
..................................................................................................................
Íslensk
..................................................................................................................