Bit schreiben / lesen
- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Bit schreiben / lesen
Ach, guck mal an. Das war anscheinend mal von mir. 
Re: Bit schreiben / lesen
Ich frag mich allerdings warum du (damals?) bei SetBitFalse() erst noch ein Bit setzt und dann wieder löschst ?
Also im Prinzip reich doch:
Hier noch der Vollständigkeitshalber:
Edit: SetBit geht ja noch einfacher, ohne Abfrage ^^
Also im Prinzip reich doch:
Code: Alles auswählen
Procedure SetBit(Quad.q, Bit.i, Value.i)
ProcedureReturn Quad & ~(1<<Bit) | Value<<Bit
EndProcedure
Debug RSet(Bin(SetBit(%0000, 0, 1)),4,"0")
Debug RSet(Bin(SetBit(%0000, 3, 1)),4,"0")
Debug RSet(Bin(SetBit(%1111, 0, 1)),4,"0")
Debug RSet(Bin(SetBit(%1111, 3, 1)),4,"0")
Debug RSet(Bin(SetBit(%0000, 0, 0)),4,"0")
Debug RSet(Bin(SetBit(%0000, 3, 0)),4,"0")
Debug RSet(Bin(SetBit(%1111, 0, 0)),4,"0")
Debug RSet(Bin(SetBit(%1111, 3, 0)),4,"0")
Code: Alles auswählen
Procedure GetBit(Quad.q, Bit.i)
ProcedureReturn Quad>>Bit & 1
EndProcedure
Debug GetBit(%0000, 3)
Debug GetBit(%1111, 3)
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
-
Christian H
- Beiträge: 134
- Registriert: 18.10.2005 10:22
- Wohnort: Welschbillig
Re: Bit schreiben / lesen
Sollte man dass nicht als Makro schreiben?!STARGÅTE hat geschrieben:Code: Alles auswählen
Procedure SetBit(Quad.q, Bit.i, Value.i)
Code: Alles auswählen
Macro SetBit(var, Bit, Value)
var & ~(1<<Bit) | Value<<Bit
EndMacro
Define.b
Test = %0000
SetBit(Test, 0, 1) : Debug RSet(Bin(Test),4,"0")
SetBit(Test, 3, 1) : Debug RSet(Bin(Test),4,"0")
SetBit(Test, 1, 1) : Debug RSet(Bin(Test),4,"0")
SetBit(Test, 2, 1) : Debug RSet(Bin(Test),4,"0")
SetBit(Test, 0, 0) : Debug RSet(Bin(Test),4,"0")
Debug "--------------"
Define.q
Test = %0000
SetBit(Test, 0, 1) : Debug RSet(Bin(Test),4,"0")
SetBit(Test, 3, 1) : Debug RSet(Bin(Test),4,"0")
SetBit(Test, 1, 1) : Debug RSet(Bin(Test),4,"0")
SetBit(Test, 2, 1) : Debug RSet(Bin(Test),4,"0")
SetBit(Test, 0, 0) : Debug RSet(Bin(Test),4,"0")Re: Bit schreiben / lesen
Jo, vermutlich günstiger, dann aber bitte alles schön einklammern, damit es nicht zu flaschen Ergebnissen kommt, weil sich die Priorität ändert:
Code: Alles auswählen
Macro SetBit(var, Bit, Value)
( (var) & ~(1<<(Bit)) | (Value)<<(Bit) )
EndMacro
Macro GetBit(var, Bit)
( (var)>>(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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Bit schreiben / lesen
Wäre auch schön, wenn es richtige Ergebnisse bringen würde
Ergibt bei mir immer noch %1111, weil Bit 0 ist bereits gesetzt, also keine
Änderung!
Oder was macht euer Code, was ich nicht verstehe
Code: Alles auswählen
Debug RSet(Bin(SetBit(%1111, 0, 1)),4,"0")Änderung!
Oder was macht euer Code, was ich nicht verstehe
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Bit schreiben / lesen
Ich weiß auch nicht mehr so genau, was ich mir vor mehr als 7 Jahren dabei gedacht habe. ^^STARGÅTE hat geschrieben:Ich frag mich allerdings warum du (damals?) bei SetBitFalse() erst noch ein Bit setzt und dann wieder löschst ?
Also im Prinzip reich doch:Code: Alles auswählen
Procedure SetBit(Quad.q, Bit.i, Value.i) ProcedureReturn Quad & ~(1<<Bit) | Value<<Bit EndProcedure Debug RSet(Bin(SetBit(%0000, 0, 1)),4,"0") Debug RSet(Bin(SetBit(%0000, 3, 1)),4,"0") Debug RSet(Bin(SetBit(%1111, 0, 1)),4,"0") Debug RSet(Bin(SetBit(%1111, 3, 1)),4,"0") Debug RSet(Bin(SetBit(%0000, 0, 0)),4,"0") Debug RSet(Bin(SetBit(%0000, 3, 0)),4,"0") Debug RSet(Bin(SetBit(%1111, 0, 0)),4,"0") Debug RSet(Bin(SetBit(%1111, 3, 0)),4,"0")
Das ist schon richtig, dass da %1111 heraus kommt. Du setzt Bit 0 auf 1. Und da es vorher schon 1 war, bleibt es das auch.ts-soft hat geschrieben:Wäre auch schön, wenn es richtige Ergebnisse bringen würde
Ergibt bei mir immer noch %1111, weil Bit 0 ist bereits gesetzt, also keineCode: Alles auswählen
Debug RSet(Bin(SetBit(%1111, 0, 1)),4,"0")
Änderung!
Oder was macht euer Code, was ich nicht verstehe
///Edit:
Im Übrigen hier mein Vorschlag für die Makros:
Code: Alles auswählen
Macro _BV(bit)
(1 << bit)
EndMacro
Macro SetBitFalse(var, bit)
(var & ~_BV(bit))
EndMacro
Macro SetBitTrue(var, bit)
(var | _BV(bit))
EndMacro
Macro SetBit(var, bit, value)
((var | _BV(bit)) ! ((value ! 1) << bit))
EndMacro
Macro GetBit(var, bit)
((var & _BV(bit)) >> bit) & 1
EndMacro- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Bit schreiben / lesen
NicTheQuick hat geschrieben:Das ist schon richtig, dass da %1111 heraus kommt. Du setzt Bit 0 auf 1. Und da es vorher schon 1 war, bleibt es das auch.
Code: Alles auswählen
Macro SetBit(var, Bit, Value)
( (var) & (1<<(Bit)) | (Value)<<(Bit) )
EndMacro
Macro GetBit(var, Bit)
( (var)>>(Bit) & 1 )
EndMacro
Debug RSet(Bin(SetBit(%1111, 0, 1)),4,"0") nur so nebenbei angemerkt, nicht das sich das jemand wegspeichert ohne zu prüfen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- NicTheQuick
- Ein Admin
- Beiträge: 8820
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Bit schreiben / lesen
Doch, sein Code ist richtig. Aber aus irgendeinem Grund hast du die Tilde (~) nicht kopiert.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Bit schreiben / lesen
Achso, das alte Tilde Problem mit meinem Greasemonkey ScriptNicTheQuick hat geschrieben:Doch, sein Code ist richtig. Aber aus irgendeinem Grund hast du die Tilde (~) nicht kopiert.
Dann nehme ich alles zurück.
Schon das zweite mal, das ich in die Tilde-Falle laufe.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Bit schreiben / lesen
Ja sry, ich kanns mir zur Zeit noch nicht erklären, warum das in FF verschwindet ...Achso, das alte Tilde Problem mit meinem Greasemonkey Script
versuche mich aber darum zu kümmern ...
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
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr