Bit in Zahl setzen/löschen
Übersicht

![]() |
IguanBetreff: Bit in Zahl setzen/löschen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, ich möchte gerne ein einzelnes Bit in einer Zahl setzen oder löschen... irgendwie klappt das löschen in meiner Funktion nicht:
Code: [AUSKLAPPEN] Function SetBit(Value,Bit, State) Mask = 1 Shl Bit If State Then Value = Value Or Mask Else NegMask = Not Mask ;<-- hier wird das Problem liegen Value = Value And NegMask EndIf Return Value End Function Function TestBit(Value,Bit) Value = Value And (1 Shl Bit) If Value Then Return 1 Else Return 0 End Function In C kann man ja Bits folgendermassen löschen: Mask = 1 << ZuLoeschendesBit; Value & = ~Mask; und so setzen: Mask = 1 << ZuSetzendesBit; Value |= Mask; nun... wie macht man das in BlitzBasic? Code: [AUSKLAPPEN] Mask = 1 Value = NOT Mask "Value" müsste doch eigentlich eine grosse Zahl ergeben, da alle Binären Nullen zu Einsen werden...oder verstehe ich da was falsch? ![]() ![]() |
||
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine binäre Negation ist in BB auch ~
Also: Code: [AUSKLAPPEN] NegMask = ~Mask
Alternativ müsstest du es über eine Bank lösen können. |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn man so überlegt hat Chester eigentlich schon alles gesagt was in deinem Fall von Bedeutung ist.
Aus irgendeinem Grund war ich (bevor ich nachgedacht hab) aber schon so aktiv, selbst was zu basteln: Code: [AUSKLAPPEN] Local mask=0
DebugLog "Setze 2. Bit" mask=SetBit(mask,2) For i=0 To 7 DebugLog GetBit(mask,i) Next DebugLog "Setze 5. Bit" mask=SetBit(mask,5) For i=0 To 7 DebugLog GetBit(mask,i) Next DebugLog "Lösche 2. Bit" mask=UnsetBit(mask,2) For i=0 To 7 DebugLog GetBit(mask,i) Next DebugLog "Lösche 3. Bit" mask=UnsetBit(mask,3) For i=0 To 7 DebugLog GetBit(mask,i) Next WaitKey() End Function SetBit(value,bit) Return value Or (1 Shl bit) End Function Function UnsetBit(value,bit) Return value And ~(1 Shl bit) End Function Function GetBit(value,Bit) Return (value And (1 Shl Bit))>0 End Function Tja... es is aber nix Neues, sondern bestätigt im Prinzip nur deine Herangehensweise ![]() mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
Iguan |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vielen Dank! Genau das brauchte ich ![]() |
||
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Alle anderen, dort, wo du geschaut hast. Den, den du verpasst hast, hier. | ||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Da wir schon so kleinlich sind und von Bits reden möchte ich anmerken, dass Eingeproggts GetBit() das Vorzeichen-Bit nicht erkennen kann, da:
Code: [AUSKLAPPEN] 1 Shl 31 = −2147483648 <= 0
Entsprechend muss das größer-Zeichen durch ein ungleich ersetzt werden, oder man benutzt die folgende übrigens schnellere Funktion(wie gesagt, kleinlich ![]() BlitzBasic: [AUSKLAPPEN] Function GetBit(value, bit) |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group