Variablen binär darstellen und bits ändern

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von DHB.

    Variablen binär darstellen und bits ändern

    Hallo erstmal, ich höffe ihr könnt mir weiterhelfen.

    ich benutze bascom avr um microcontroller mit basic zu programmieren.
    dort kann ich mit variable = &B0000000000 die variable binär darstellen und mit variable.x=1 den bit an der stelle x auf 1 oder 0 setzen.
    geht das auch in visual basic?
    wenn ich es auf die oben beschriebene weise versuche bekomme ich den fehler "ausdruck erwartet"
    ich benutze VB6
    Das setzen und löschen von einzelnen Bits geht in VB mit dem logischen Or bzw. dem Logischen And.
    Also

    Visual Basic-Quellcode

    1. Bits = &H09 ' 0000 1001 '1. + 3. Bit
    2. Variable1 = Variable1 Or Bits ' Bits werden auf 1 gesetzt
    3. Variable1 = Variable1 And Not Bits ' Bits werden auf 0 gesetzt


    Du musst aber aufpassen, VB6 unterstützt für Short und Long Integer keine Unsigned-Varianten und für Bytes nur Unsigned. Also bei binären Aufgaben sollte man wenn möglich mit Bytes bzw. Byte Arrays arbeiten.
    hmmm...
    danke schonmal, aber so ganz kapier ichs nicht. mein problem ist folgendes:
    ich hab ein fenster mit 5x5 buttons, also insgesamt 25.
    jedem button soll ein bit in einer long variablen zugewiesen werden.
    je nachdem ob der bit 1 oder 0 ist soll der button weiss oder blau sein.
    wenn ich für jeden button eine eigene variable nehme geht das auch

    Private Sub Command1_Click()
    If b1 = 0 Then
    Command1.BackColor = &HFF0000
    b1 = 1
    Else
    Command1.BackColor = &HFFFFFF
    b1 = 0

    End If
    End Sub

    alledings würde ich das gerne über eine gemeinsame long variable lösen, und diese anschließend über ein textfeld ausgeben. dann könnte ich diese einfach in mein bascom text kopieren.
    das ganze dient zum erstellen von mustern auf einer 5x5 led matrix
    ich beschäftige mich erst seit ner woche mit dem ganzen kram, deswegen bin ich noch etwas unbeholfen :S
    kann mir keiner weiterhelfen?

    ich hätte einfach gern, dass wenn zb der erste button einmal angeklickt wird der erste bit einer long variablen auf 1 gesetzt wird, beim zweiten mal klicken wieder auf 0 und die variable dann als 0000000..0001 bzw als 0000000...0000 in einem textfeld ausgegeben wird
    müsste doch kein problem sein für euch profis oder? ;)
    Hi Bösewicht,

    mach aus deinen Buttons erst mal ein Steuerelementefeld (Index-Eigenschaft) und dann

    probier mal dieses:

    Visual Basic-Quellcode

    1. Private Bits&
    2. Private Sub Command1_Click(Index As Integer)
    3. Dim S&, T$, i%
    4. S = Bits
    5. Bits = Bits Xor (2 ^ Index)
    6. Command1(Index).BackColor = IIf(Bits < S, vbBlue, vbWhite)
    7. S = Bits: T = ""
    8. For i = 0 To Command1.UBound
    9. T = (S And 1) & T
    10. S = S \ 2
    11. Next i
    12. Text1.Text = T
    13. End Sub




    Gruss,

    Neptun
    Gruss,

    Neptun
    Hey bösewicht,

    hier hast Du 3 Funktionen, mit denen Du die Bits in einer Variablen vom Typ Long 'setzen', 'löschen' und 'testen' kannst; auch das Vorzeichenbit! Mögliche Fehler musst Du natürlich noch selbst abfangen.

    Visual Basic-Quellcode

    1. Public Function BitSet(ByRef Ziel&, ByVal BitNr%) As Long
    2. If BitNr >= 0 And BitNr <= 30 Then
    3. Ziel = (Ziel Or 2 ^ BitNr)
    4. ElseIf BitNr = 31 Then
    5. Ziel = (Ziel Or &H80000000)
    6. End If
    7. BitSet = Ziel
    8. End Function
    9. Public Function BitClear(ByRef Quelle&, ByVal BitNr%) As Long
    10. Dim h As Long
    11. If BitNr >= 0 And BitNr <= 30 Then
    12. h = &HFFFFFFFF - (2 ^ BitNr)
    13. Quelle = (Quelle And h)
    14. ElseIf BitNr = 31 Then
    15. Quelle = (Quelle And &H7FFFFFFF)
    16. End If
    17. BitClear = Quelle
    18. End Function
    19. Public Function BitTest(ByRef Quelle&, ByVal BitNr%) As Long
    20. Dim Flag As Boolean
    21. If BitNr >= 0 And BitNr <= 30 Then
    22. Flag = (Quelle And 2 ^ BitNr)
    23. ElseIf BitNr = 31 Then
    24. Flag = (Quelle And &H80000000)
    25. End If
    26. BitTest = Flag
    27. End Function


    Andere Datentypen (Integer, Byte, Boolean und sogar String) oder andere Bitoperationen (BitTransfer, BitChange oder BitCount) sind nach diesem Motto leicht anzupassen.
    mfG DHB

    Ich meine:
    :P Es sollten nur ernstzunehmende Beiträge eingestellt werden!
    :( Beiträge, die nur deren Anzahl in die Höhe treiben sollen, stehlen Lesern deren Zeit und schenken nur Frust.
    ;) Wenn ein Autor sein Thema für erledigt hält, sollte er dies kurz als letzten Eintrag vermerken.
    8) Leser wüssten dann, dass hier weitere Beiträge nicht mehr sinnvoll sind.