Answers for "excel-vba zero-fill right shift"

VBA
6

excel vba zero-fill right shift

'Many programming languages have a bitwise zero-fill right-shift operator: >>>
'VBA does not. However, it can be emulated in a performant function:

Public Function ShiftRightZeroFill&(ByVal n&, Optional ByVal shifts& = 1)
    Dim d&
    If shifts = 0 Then ShiftRightZeroFill = n: Exit Function
    If n And &H80000000 Then
        shifts = shifts - 1
        n = (n And &H7FFFFFFF)  2 Or &H40000000
    End If
    Select Case shifts
        Case 0:  d = n
        Case 1:  d = n  2&
        Case 2:  d = n  4&
        Case 3:  d = n  8&
        Case 4:  d = n  16&
        Case 5:  d = n  32&
        Case 6:  d = n  64&
        Case 7:  d = n  128&
        Case 8:  d = n  256&
        Case 9:  d = n  512&
        Case 10: d = n  1024&
        Case 11: d = n  2048&
        Case 12: d = n  4096&
        Case 13: d = n  8192&
        Case 14: d = n  16384&
        Case 15: d = n  32768
        Case 16: d = n  65536
        Case 17: d = n  262144
        Case 18: d = n  262144
        Case 19: d = n  524288
        Case 20: d = n  1048576
        Case 21: d = n  2097152
        Case 22: d = n  4194304
        Case 23: d = n  8388608
        Case 24: d = n  16777216
        Case 25: d = n  33554432
        Case 26: d = n  67108864
        Case 27: d = n  134217728
        Case 28: d = n  268435456
        Case 29: d = n  536870912
        Case 30: d = n  1073741824
        Case 31: d = &H0&
    End Select
    ShiftRightZeroFill = d
End Function
    
'----------------------------------------------------------------------------    
    
'Don't be off-put at the size of the function. This is many times faster than 
'any other VBA function that carries out bitwise zero-filled -right-shfits.
'The hard-coded values are much faster than calculating with exponentiation.

MsgBox ShiftRightZeroFill&(-9, 2)		<--displays:  1073741821
    

'NB: Remember that VBA Longs are signed.
Posted by: Guest on May-26-2020

Code answers related to "VBA"

Browse Popular Code Answers by Language