Binaer arbeiten

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
KatSeiko
Beiträge: 367
Registriert: 19.07.2008 07:47

Binaer arbeiten

Beitrag von KatSeiko »

Servus,

Ich brauche eure Hilfe bei einem kleinen Rechenproblem: Ich brauche eine StructureUnion, die aus folgendem besteht:
Ein Array mit Byte-Groesse (Byte[0..3])
Ein Array aus Binary-Groessen (Binary[0..31])
Einer Variable mit 32 bit Groesse (Integer)

Die Integer- und die Binary-Groesse ist kein Problem, aber welcher Variablentyp bitte ist nur einen Bit gross? Gibt es einen derartigen Variablentyp in PureBasic ueberhaupt?
Win7 Ultimate x64, PureBasic 5.11

There is no substitute..
BildBildBild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Binaer arbeiten

Beitrag von STARGÅTE »

Nein es gibt keinen Bit-Typen ...
Das kleinste ist Byte (8Bit)

Von dort aus musst du dich mit Bit-Operatoren "tiefer kämpfen"

Code: Alles auswählen

Macro SetBit(Value, Bit, State)
  ( (Value) & ~(1<<(Bit)) | (State)<<(Bit) )
EndMacro

Macro GetBit(Value, Bit)
  ( (Value)>>(Bit) & 1 )
EndMacro
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
KatSeiko
Beiträge: 367
Registriert: 19.07.2008 07:47

Re: Binaer arbeiten

Beitrag von KatSeiko »

Das ist schon etwas zu hoch. Kannst du mir dazu sagen, was du mit diesen Operationen genau tust?
Win7 Ultimate x64, PureBasic 5.11

There is no substitute..
BildBildBild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Binaer arbeiten

Beitrag von STARGÅTE »

Mit diesen Operationen kannst du Bits setzen und lesen.
Da du kan nicht über ein ArrayFeld auf die Bits in einem Integer zugreifen kannst, wären die Macros ein möglicher Weg:

Code: Alles auswählen

Macro SetBit(Value, Bit, State)
  ( (Value) & ~(1<<(Bit)) | (State)<<(Bit) )
EndMacro

Macro GetBit(Value, Bit)
  ( (Value)>>(Bit) & 1 )
EndMacro


Integer = 20
Debug Bin(Integer)
For Bit = 0 To 6
  Debug GetBit(Integer, Bit)
Next

Integer = SetBit(Integer, 0, 1)
Integer = SetBit(Integer, 4, 0)

Debug Integer
Debug Bin(Integer)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten