VBScript でビットシフト演算する (unibon)

1999年07月26日: 新規作成(推定)。

VBScript でビットシフト演算をします。
あふれにも対処しています。Long 型(32 ビット)の精度を持ちます。
関数 BitShift の第1引数(1から数えて)に、ビットシフトの対象となる値、第2引数(1から数えて)に、シフト幅を指定します。シフト幅は正がいわゆる左シフト、負が右シフトになります。 VB や VBA でも使えます。

Function BinToDec(ByVal x)
    Dim a
    a = 1
    Dim y
    y = "" 'いわゆるリトルエンディアンなので注意
    Dim i
    For i = 0 To &H20 - 1
        If x And a Then
            y = y & "1"
        Else
            y = y & " "
        End If

        If i < &H20 - 1 - 1 Then
            a = a * 2
        Else
            a = &H80000000 'オーバフロー対策
        End If
    Next
    BinToDec = y
End Function

Function DecToBin(ByVal x)
    Dim a
    a = 1
    Dim y
    y = 0
    Dim i
    For i = 0 To &H20 - 1
        If Mid(x, i + 1, 1) <> " " Then
            y = y Or a
        End If

        If i < &H20 - 1 - 1 Then
            a = a * 2
        Else
            a = &H80000000 'オーバフロー対策
        End If
    Next
    DecToBin = y
End Function

Function BitShift(ByVal x, ByVal s)
    Dim y
    y = BinToDec(x)
    Dim z
    If s >= 0 Then
        z = Space(s) & Mid(y, 1, &H20 - s)
    Else
        z = Mid(y, (-s) + 1) & Space(-s)
    End If
    Dim r
    r = DecToBin(z)
    BitShift = r
End Function

ASP の目次
ホーム
(このページ自身の絶対的な URL)