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