Bits testen über macros

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Bits testen über macros

Beitrag von Hellhound66 »

Code: Alles auswählen


; Author: hellhound66
; Date: 02. October 2006
; OS: Windows
; Demo: Yes

#BIT_0      = 1         :   #BIT_1      = 2*#BIT_0  :   #BIT_2      = 2*#BIT_1
#BIT_3      = 2*#BIT_2  :   #BIT_4      = 2*#BIT_3  :   #BIT_5      = 2*#BIT_4
#BIT_6      = 2*#BIT_5  :   #BIT_7      = 2*#BIT_6  :   #BIT_8      = 2*#BIT_7
#BIT_9      = 2*#BIT_8  :   #BIT_10     = 2*#BIT_9  :   #BIT_11     = 2*#BIT_10
#BIT_12     = 2*#BIT_11 :   #BIT_13     = 2*#BIT_12 :   #BIT_14     = 2*#BIT_13
#BIT_15     = 2*#BIT_14 :   #BIT_16     = 2*#BIT_15 :   #BIT_17     = 2*#BIT_16
#BIT_18     = 2*#BIT_17 :   #BIT_19     = 2*#BIT_18 :   #BIT_20     = 2*#BIT_19
#BIT_21     = 2*#BIT_20 :   #BIT_22     = 2*#BIT_21 :   #BIT_23     = 2*#BIT_22
#BIT_24     = 2*#BIT_23 :   #BIT_25     = 2*#BIT_24 :   #BIT_26     = 2*#BIT_25
#BIT_27     = 2*#BIT_26 :   #BIT_28     = 2*#BIT_27 :   #BIT_29     = 2*#BIT_28
#BIT_30     = 2*#BIT_29 :   #BIT_31     = 2*#BIT_30     ; Kann noch erweitert werden, bei Bedarf..


Macro CheckBit(__Var,__Bit)
    (__Var#&#BIT_#__Bit#)
EndMacro

a= #BIT_1|#BIT_3

If CheckBit(a,1)
    Debug "Bit 1 ist gesetzt"
EndIf

If CheckBit(a,5)
    Debug "Bit 5 ist gesetzt"
EndIf

Optimismus ist ein Mangel an Information.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Code: Alles auswählen

Macro CheckBit(__Var,__Bit) 
    (__Var#&(1<<__Bit)) 
EndMacro 

a= (1<<1) | (1<<3)

If CheckBit(a,1) 
    Debug "Bit 1 ist gesetzt" 
EndIf 

If CheckBit(a,5) 
    Debug "Bit 5 ist gesetzt" 
EndIf
;)
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Ist aber nicht so schnell... :freak: Hellhound wollte nur auf die Schnelligkeit hinaus.

[EDIT]
Gut, man sollte auch Variablen statt Konstanten nutzen wenn man was dynamisches damit anfangen will.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Beitrag von Hellhound66 »

Doch ist genauso schnell. Da haben wir mal ne Ecke, wo PB tatsächlich mal was optimiert. Hätt ich PB gar nicht zugetraut :mrgreen:
Optimismus ist ein Mangel an Information.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Hellhound66 hat geschrieben:Doch ist genauso schnell. Da haben wir mal ne Ecke, wo PB tatsächlich mal was optimiert. Hätt ich PB gar nicht zugetraut :mrgreen:
Achja? Und wieso schnautzt du mich dann im IRC so an das sei nicht so schnell und es ginge garnicht anders so schnell? Es kann wenn es dynamisch genutzt wird nicht genauso schnell gehen, soviel ist korrekt. Aber wenn es statisch gebraucht wird geht es genau so schnell.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Ich versteh die Aufregung nich, Hellhounds Version unterstützt doch garkeine Variablen. Von daher is die Diskussion darüber welches mit Variablen schneller sei völlig sinnlos. :roll:
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Beitrag von Hellhound66 »

Stimmt genau. Ich hab nur bis zur nächsten Ecke gedacht, ohne drumherum zu schauen.
Optimismus ist ein Mangel an Information.
Antworten