Zuweisung von Bits

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
maksimilian
User
Beiträge: 25
Registriert: Freitag 2. November 2018, 20:59

Dienstag 13. November 2018, 23:33

Hallo Ihr,

ich möchte zur Simulation eines Bit-Stroms eine Bit-Liste erstellen und in ihr bestimmten Positionen den Wert 0 oder 1 zuweisen. Was nicht funktioniert ist beispielsweise folgendes:

data = [0x0] * 3 # Bitfeld der Länge 24
# Versuch, ein Bit zu setzen:
data[3] = True oder data[3] = 0b1 funktioniert nicht

Wie muss ich hier vorgehen ?

maksimilian
__deets__
User
Beiträge: 4016
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dienstag 13. November 2018, 23:41

Entweder willst du mit Bits arbeiten, dann nimm eine Ganzzahl und den shift-Operator <<, oder du willst "simulieren", dann benutz eine Liste mit 24 bools. Dein Mischmasch ist nur unnoetig kompliziert.

Code: Alles auswählen

>>> a = 0
>>> a |= 1 << 13
>>> a
8192
oder

Code: Alles auswählen

>>> a = [False] * 24
>>> a[13] = True
>>> a
[False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False]
Benutzeravatar
__blackjack__
User
Beiträge: 1580
Registriert: Samstag 2. Juni 2018, 10:21

Mittwoch 14. November 2018, 00:02

@maksimilian: Was heisst „funktioniert nicht“? Ich sehe da ohne es auszuführen einen sehr offensichtlichen `IndexError`. Falls *der* Dich überrascht, dann verrate mal wie die Liste aussieht und welcher Wert an welchem Index zu finden ist.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
maksimilian
User
Beiträge: 25
Registriert: Freitag 2. November 2018, 20:59

Donnerstag 15. November 2018, 13:11

@ deets, blackjack

Ihr seht ja aus meiner Frage, dass ich mit den Datentypen in Python noch nicht so vertraut bin und bin dankbar für Eure (nachsichtigen) Antworten. Damit der Hintergrund meiner Problematik klar wird: ich teste zur Zeit den Anschluss einer Bosche Wägezelle an einen AD-Wandler HX711. Dessen Ausgabe soll für den Test meiner Programmierung simuliert werden. In diesem Zusammenhang möchte ich erst einmal das Bithandling in Python verstehen und muss darüber weiter nachdenken, bevor ich weitere Fragen stelle.

maksimilian
Benutzeravatar
__blackjack__
User
Beiträge: 1580
Registriert: Samstag 2. Juni 2018, 10:21

Donnerstag 15. November 2018, 13:31

@maksimilian: Bit-Operationen in Python sind eigentlich die gleichen wie in C (oder Java, oder andere ähnliche Sprachen), nur das ganze Zahlen keine Begrenzung auf eine bestimmte Bitanzahl haben, sondern im Grunde in der Grösse nur durch den zur Verfügung stehenden Speicher begrenzt sind.

Code: Alles auswählen

    **** COMMODORE 64 BASIC V2 ****
 64K RAM SYSTEM  38911 BASIC BYTES FREE
   CYBERPUNX RETRO REPLAY 64KB - 3.8P
READY.
█
__deets__
User
Beiträge: 4016
Registriert: Mittwoch 14. Oktober 2015, 14:29

Donnerstag 15. November 2018, 13:57

maksimilian hat geschrieben:
Donnerstag 15. November 2018, 13:11
Ihr seht ja aus meiner Frage, dass ich mit den Datentypen in Python noch nicht so vertraut bin und bin dankbar für Eure (nachsichtigen) Antworten. Damit der Hintergrund meiner Problematik klar wird: ich teste zur Zeit den Anschluss einer Bosche Wägezelle an einen AD-Wandler HX711. Dessen Ausgabe soll für den Test meiner Programmierung simuliert werden. In diesem Zusammenhang möchte ich erst einmal das Bithandling in Python verstehen und muss darüber weiter nachdenken, bevor ich weitere Fragen stelle.
Wenn am Ende eine "echte" Kommunikation steht, dann solltest du eben nicht mit Listen, sondern eben mit Ganzzahlen und den entsprechenden Bit-Operationen arbeiten, wie von mir gezeigt.
Antworten