Re: Bit schreiben / lesen
Verfasst: 16.02.2011 18:04
Ach, guck mal an. Das war anscheinend mal von mir. 
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)
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")Code: Alles auswählen
Macro SetBit(var, Bit, Value)
( (var) & ~(1<<(Bit)) | (Value)<<(Bit) )
EndMacro
Macro GetBit(var, Bit)
( (var)>>(Bit) & 1 )
EndMacro
Code: Alles auswählen
Debug RSet(Bin(SetBit(%1111, 0, 1)),4,"0")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
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
EndMacroNicTheQuick 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") 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.
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