Problem mit BitAND

  • Morgen Leute,

    vielleicht sitze ich ja auf dem Schlauch oder es ist einfach zu früh.
    Ich möchte gerne ein Word auswerten ob bestimmte Bits gesetzt sind.
    Das wollte ich so machen:

    [autoit]

    Global $abRecvData[20], $aBit[16] = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

    [/autoit][autoit][/autoit][autoit]

    $abRecvData[2] = 0x0404

    [/autoit][autoit][/autoit][autoit]

    For $i = 0 To UBound($aBit) - 1
    If BitAND(Hex($abRecvData[2], 4), Hex(2 ^ $aBit[$i], 4)) Then
    ConsoleWrite($i & " True " & Hex($abRecvData[2], 4) & "=" & Hex(2 ^ $aBit[$i], 4) & @CRLF)
    Else
    ConsoleWrite($i & " False" & @CRLF)
    EndIf
    Next

    [/autoit]


    Also bei dem Word 0x0404 sind dann Bit 0 und Bit 10 gesetzt. Demnach müsste bei der Konsole auch nur bei den beiden ein true hinschreiben, also bei 0404=0004 und 0404=0400. Aber wieso wird bei manchen anderen auch noch ein true geschrieben?

    Einmal editiert, zuletzt von m-obi (29. Februar 2012 um 09:15)

  • Ok habs :rolleyes:

    So muss das heißen:

    [autoit]

    If BitAND(Hex($abRecvData[2], 4), Hex(2 ^ $aBit[$i], 4)) = Hex(2 ^ $aBit[$i], 4) Then

    [/autoit]

    Aber ich mach es jetzt so:

    [autoit]

    If BitAND(BitShift($abRecvData[2], $aBit[$i]), 1) Then

    [/autoit]


    Ist wesentlich einfacher.