Binärdarstellung?
Moderator: Moderatoren
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Binärdarstellung?
Hi,
es gibt die Technik mit Zahlen zu arbeiten:
1 für dies
2 für da
4 für jenes
es kann jede Zahl einzeln, oder aber auch in Summe übergeben werden:
1+2
oder 3
1+2+4
oder 7
1. wie nennt man das Verfahren?
2. hat jemand eine Ahnung, wie das ausgewertet wird?
3. sind die 3 Zahlen die Standardauswahl, oder geht es auch weiter?
Ich überlege mir, wie man sowas umsetzen kann, wenn man z.B. etliche XbParts hat, die man aber unterschiedlich aktivieren oder deaktivieren will/muß. Es wird "eine" Zahl als Parameter übergeben und dann kann ermittelt werden, was mit welchem Part gemacht werden muß.
es gibt die Technik mit Zahlen zu arbeiten:
1 für dies
2 für da
4 für jenes
es kann jede Zahl einzeln, oder aber auch in Summe übergeben werden:
1+2
oder 3
1+2+4
oder 7
1. wie nennt man das Verfahren?
2. hat jemand eine Ahnung, wie das ausgewertet wird?
3. sind die 3 Zahlen die Standardauswahl, oder geht es auch weiter?
Ich überlege mir, wie man sowas umsetzen kann, wenn man z.B. etliche XbParts hat, die man aber unterschiedlich aktivieren oder deaktivieren will/muß. Es wird "eine" Zahl als Parameter übergeben und dann kann ermittelt werden, was mit welchem Part gemacht werden muß.
Zuletzt geändert von Manfred am Sa, 23. Feb 2008 15:14, insgesamt 1-mal geändert.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16509
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
das sieht mir sehr nach binärarithmetik aus - ein Bit kann an oder aus sein.
Du hast also x Bits und somit eine Zahl 2^x.
Einfach die einzelnen Zustände ORen...
Viele Grüße,
Martin
das sieht mir sehr nach binärarithmetik aus - ein Bit kann an oder aus sein.
Du hast also x Bits und somit eine Zahl 2^x.
Einfach die einzelnen Zustände ORen...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
ich verstehe kein Wort.
ich verstehe kein Wort.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16509
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
schau mal in Wikipedia unter dem Schlagwort Binärdarstellung
Wenn Du also vier verschiedene "Schalter" hast, von denen jeder ein oder aus sein kann, so würde das Dual (oder binär) so aussehen:
0000 -> Alle sind aus
1111 -> Alle sind an
Man liest jetzt beim Rechnen von recht nach links - die Basis ist 2, da es zwei Zustände gibt (0 oder 1) und der Exponent beginnt bei 0.
Ergo:
1111 bedeutet somit in dezimaler Schreibweise 15.
Wenn Du jetzt das Gesamtergebnis numerisch in der Variablen nZustand hättest, könntest Du einfach prüfen, ob das vierte Bit (von rechts) gesetzt ist, indem Du einfach mittels
prüfst.
Viele Grüße,
Martin
schau mal in Wikipedia unter dem Schlagwort Binärdarstellung
Wenn Du also vier verschiedene "Schalter" hast, von denen jeder ein oder aus sein kann, so würde das Dual (oder binär) so aussehen:
0000 -> Alle sind aus
1111 -> Alle sind an
Man liest jetzt beim Rechnen von recht nach links - die Basis ist 2, da es zwei Zustände gibt (0 oder 1) und der Exponent beginnt bei 0.
Ergo:
Code: Alles auswählen
1 1 1 1 <- Zustände
2^3 2^2 2^1 2^0 <- Dual
8 4 2 1 <- Dezimal
Wenn Du jetzt das Gesamtergebnis numerisch in der Variablen nZustand hättest, könntest Du einfach prüfen, ob das vierte Bit (von rechts) gesetzt ist, indem Du einfach mittels
Code: Alles auswählen
if nZustand[ 4 ]...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Nun, die Lösung ist klar, aber der Weg dahin, da stellt sich die Frage, ob der jetzt zu kompliziert ist?
Also es wird angenommen, ich habe 5 Buttons:
1
2
4
8
16
Wenn alle aktiv sein sollen, dann würde das heißen 1+2+4+8+16 = 31
Das ist einfach zu ermitteln, weil
31 - 16 = 15 -->5
15 - 8 = 7 -->4
7 - 4 = 3 -->3
3 - 2 = 1 --> 2
1 - 1 = 0 --> 1
wenn ich die Nummer 3 NICHT haben will, dann ergäbe 1+2+8+16 = 27
27 - 16 = 11 -->5
11 - 8 = 3 -->4
3- 4 = - 1 -->3 = falsch
3-2 = 1 --> 2
1-1 = 0 -->1
Dafür muß es doch eine Formel geben, die am Ende ausspuckt was rauskommt. Oder muß man das hier von Hand machen? Vor allen Dingen wäre ja wichtig für die Funktion, wenn sie automatisch wüßte, welcher max. Wert am Anfang genommen werden muß beim Abziehen.
Der einfachste oder auch blödeste Weg wäre, alle Parts, die in Frage kommen in ein Array zu packen. Ein Len zu ermitteln und dann von unten anfangen hochzuzählen also 1,2,4,8 usw. Und dann von oben wieder runter das obige Beispiel zu durchlaufen.
Also es wird angenommen, ich habe 5 Buttons:
1
2
4
8
16
Wenn alle aktiv sein sollen, dann würde das heißen 1+2+4+8+16 = 31
Das ist einfach zu ermitteln, weil
31 - 16 = 15 -->5
15 - 8 = 7 -->4
7 - 4 = 3 -->3
3 - 2 = 1 --> 2
1 - 1 = 0 --> 1
wenn ich die Nummer 3 NICHT haben will, dann ergäbe 1+2+8+16 = 27
27 - 16 = 11 -->5
11 - 8 = 3 -->4
3- 4 = - 1 -->3 = falsch
3-2 = 1 --> 2
1-1 = 0 -->1
Dafür muß es doch eine Formel geben, die am Ende ausspuckt was rauskommt. Oder muß man das hier von Hand machen? Vor allen Dingen wäre ja wichtig für die Funktion, wenn sie automatisch wüßte, welcher max. Wert am Anfang genommen werden muß beim Abziehen.
Der einfachste oder auch blödeste Weg wäre, alle Parts, die in Frage kommen in ein Array zu packen. Ein Len zu ermitteln und dann von unten anfangen hochzuzählen also 1,2,4,8 usw. Und dann von oben wieder runter das obige Beispiel zu durchlaufen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Hi Manfred,
ich habe immer noch nicht verstanden, was du machen möchtest. So du hast 5 buttons- davon können/sollten einige nicht akiv sein.
Habe ich dich soweit verstanden ?? Woran soll denn erkannt werden, welche Buttons nicht aktiv sein sollen ? Legt dies der User fest ?
Die Function in der du die Buttons definierst wird vermutlich aus einer anderen maske aufgerufen. Vielleicht kannst du hier festlegen welche Buttons aktiv sind und welche nicht und übergibst an die Function
die Zahlen 1,2, oder 3 die deaktiviert werden sollen
ich habe immer noch nicht verstanden, was du machen möchtest. So du hast 5 buttons- davon können/sollten einige nicht akiv sein.
Habe ich dich soweit verstanden ?? Woran soll denn erkannt werden, welche Buttons nicht aktiv sein sollen ? Legt dies der User fest ?
Die Function in der du die Buttons definierst wird vermutlich aus einer anderen maske aufgerufen. Vielleicht kannst du hier festlegen welche Buttons aktiv sind und welche nicht und übergibst an die Function
die Zahlen 1,2, oder 3 die deaktiviert werden sollen
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9358
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Vermutlich geht es nicht um Buttons, sondern um Checkboxen oder ähnliches. Mehrere Optionen können unabhängig voneinander gewählt werden, und es soll ein Wert (oder ähnliches) entstehen, dem man ablesen kann, welche Optionen gewählt wurden. Das ginge ziemlich einfach, wenn die Arrayfähigkeit von Strings auch umgekehrt gegeben wäre, also z.B.:
Dann könnte man abfragen, ob die Optionen 1 und 4 gesetzt sind. Aber man kann ja hantieren. Statt cOptions[2] := "1" geht ja auch:
Wobei "nOptions" dann die Position/Nummer der Checkbox wäre.
Code: Alles auswählen
cOptions := "00000"
? cOptions[2] // "0"
cOptions[2] := "1" // z.B. in der Checkbox
* funzt leider nicht, cOptions ist noch immer "00000"
Code: Alles auswählen
cOptions := Left(cOptions,nOption-1) + "1" + Right(cOptions,nOption-1)
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi,
das mit den Checkboxen, muß ich mir mal überlegen.
Was ich meine ist, ich möchte über eine Zahl jedwede Möglichkeit haben, unter 10 Pushbutton eine beliebige Kombination von aktiven oder nicht aktiven Pushbuttons zu erzeugen.
Ich habe 10 Buttons, die für:
Eingeben
Finden
Edit
Zurück
vor
Ende
Anfang
Speichern
Löschen
beenden
stehen. Jedesmal einzeln die Buttons zu enablen oder disablen, weil nicht alle immer und zu jeder zeit aktiv sein dürfen, finde ich aufwändig. Also schreibe ich eine Funktion, die enabled oder disabled.
Nun, es scheint so auszusehen, dass es keine mathematische Formel dafür gibt, also mache ich es nach dem Muster wie oben beschrieben.
In wie weit das für andere Parts geht, werde ich mal dabei ausprobieren.
das mit den Checkboxen, muß ich mir mal überlegen.
Was ich meine ist, ich möchte über eine Zahl jedwede Möglichkeit haben, unter 10 Pushbutton eine beliebige Kombination von aktiven oder nicht aktiven Pushbuttons zu erzeugen.
Ich habe 10 Buttons, die für:
Eingeben
Finden
Edit
Zurück
vor
Ende
Anfang
Speichern
Löschen
beenden
stehen. Jedesmal einzeln die Buttons zu enablen oder disablen, weil nicht alle immer und zu jeder zeit aktiv sein dürfen, finde ich aufwändig. Also schreibe ich eine Funktion, die enabled oder disabled.
Nun, es scheint so auszusehen, dass es keine mathematische Formel dafür gibt, also mache ich es nach dem Muster wie oben beschrieben.
In wie weit das für andere Parts geht, werde ich mal dabei ausprobieren.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9358
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Hallo, Manfred.
Wenn Du so was hast:
1
2
4
8
16
dann gibt es diese Summierungsmöglichkeiten:
1
2
3
4
5
..
31
also alle Einzelsummen zwischen 1 und 31. Jede Summe steht für eine Anzahl ausgewählter Optionen. Wenn Du jetzt von oben nach unten (also von 16 beginnend bis 1) alle möglichen Summanden abziehst, ist der jeweilige Wert enthalten, wenn die Differenz nicht kleiner als Null ist. Also:
nWert := 17
nWert - 16 = 1 // 16 ist enthalten
nWert -= 16 // 1
nWert - 8 = -7 // 7 ist NICHT enthalten
usw.
Wenn Du so was hast:
1
2
4
8
16
dann gibt es diese Summierungsmöglichkeiten:
1
2
3
4
5
..
31
also alle Einzelsummen zwischen 1 und 31. Jede Summe steht für eine Anzahl ausgewählter Optionen. Wenn Du jetzt von oben nach unten (also von 16 beginnend bis 1) alle möglichen Summanden abziehst, ist der jeweilige Wert enthalten, wenn die Differenz nicht kleiner als Null ist. Also:
nWert := 17
nWert - 16 = 1 // 16 ist enthalten
nWert -= 16 // 1
nWert - 8 = -7 // 7 ist NICHT enthalten
usw.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Tom,
mein Reden. Ich dachte nur es gäbe da schon irgendwas fertiges, oder eine Formel, mit der das kurz und knapp geht.
Naja, dann frickel ich eben selbst was....
mein Reden. Ich dachte nur es gäbe da schon irgendwas fertiges, oder eine Formel, mit der das kurz und knapp geht.
Naja, dann frickel ich eben selbst was....
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9358
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Code: Alles auswählen
FUNCTION isOption(nOption,nSelected)
* nOption ist der Wert, dessen Existenz geprüft werden soll
* nSelected ist Gesamtwert, z.B. 27
LOCAL nValue := 16 // im Beispiel höchster Binärwert
DO WHILE nSelected > 0
IF nSelected - nValue > 0
IF nValue = nOption
RETURN .T.
ENDIF
nSelected -= nValue
ENDIF
nValue := nValue / 2
ENDDO
RETURN .F.
Ungetestet und ins Blaue getippt. Geht sicher auch noch eleganter.
Herzlich,
Tom
Tom
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Tja,
mir fiel die Frage halt bei einer Tasse Kaffee und einem Glimmstengel ein. Sollte nur Klön sein, war aber mal wieder klar, dass es was größeres werden könnte. Es gab auch zu Anfang keinen Titel. Also etliche Bedingungen auf einmal.
Wenn Du willst, dann verschiebe ihn. Aber wohin? Das bleibt Dir überlassen.
mir fiel die Frage halt bei einer Tasse Kaffee und einem Glimmstengel ein. Sollte nur Klön sein, war aber mal wieder klar, dass es was größeres werden könnte. Es gab auch zu Anfang keinen Titel. Also etliche Bedingungen auf einmal.
Wenn Du willst, dann verschiebe ihn. Aber wohin? Das bleibt Dir überlassen.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Nicht schön, aber selten....
nCheckSum = 390 bewirkt, das Button 2,3,8,9 deaktiviert werden
Code: Alles auswählen
/// <summary>
/// <para>
/// <bold>disableXbp:</bold>enabled oder disabled XbParts
/// </para>
/// <para>
/// <bold>oXbp:</bold>Objekt mit den Parts, die dis/enabled werden sollen
/// </para>
/// <para>
/// <bold>lDisable:</bold>.T. = disable (default = .F.)
/// </para>
/// <para>
/// <bold>nChecksum:</bold> Wert eingeben für die Menge der Parts die geändert werden sollen
/// </para>
/// </summary>
METHOD DialogFenster:disableXbp(oXbp,lDisable,nCheckSum)
LOCAL aXbp := oXbp:childList()
LOCAL nXbp := Len(aXbp)
LOCAL nI
LOCAL nWert
DEFAULT lDisable TO .T.
DEFAULT nChecksum TO 0
IF lDisable
IF nChecksum = 0 // es soll wirklich nur disbled werden
AEval(aXbp, {|o,i| o:disable()})
ELSE
AEval(aXbp, {|o,i| o:enable()}) // erstmal alles enablen
FOR nI := nXbp TO 1 STEP -1 // jetzt geht es rückwärts mit dem Prüfen
nWert := INT(2^(ni-1))
IF nChecksum - nWert >= 0
aXbp[nI]:disable()
nChecksum -= nWert // Rest berechnen
ENDIF
NEXT
ENDIF
ELSE
IF nChecksum = 0 // es soll wirklich nur enabled werden
AEval(aXbp, {|o,i| o:enable()})
ELSE
AEval(aXbp, {|o,i| o:disable()}) // erstmal alles disablen
FOR nI := nXbp TO 1 STEP -1 // jetzt geht es rückwärts mit dem Prüfen
nWert := INT(2^(ni-1))
IF nChecksum - nWert >= 0
aXbp[nI]:enable()
nChecksum -= nWert
ENDIF
NEXT
ENDIF
ENDIF
RETURN
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16509
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hmmm,
warum machst Du nicht, was ich oben schrieb?
Viele Grüße,
Martin
warum machst Du nicht, was ich oben schrieb?
Code: Alles auswählen
nOptions := 0 //alle Buttons aus
nOptions[4] := 1
nOptions[3] := 1
? nOptions
? nOptions[2]
? nOptions[3]
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
auf Anhieb eine Antwort?
ich denke mal, weil ich nicht verstanden habe, was Du meinst
ich denke mal, weil ich nicht verstanden habe, was Du meinst
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16509
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Manfred,
ich habe es jetzt selber mal versucht - war aus der Erinnerung heraus, mal was dazu gelesen gehabt zu haben.
War leider falsch! Man kann so nicht bitweise setzen, aber bitweise abfragen!!
Sieh Dir mal die Hilfe an zum Thema []Operator (-> Beispiel 3) und $Operator (-> Beispiel 3)!
Wenn Du eine Zahl hast, kannst Du bitweise prüfen, ob das jeweilige Bit gesetzt ist oder nicht!
Also bei Deinem Beispiel oben:
Wären alle gesetzt, käme als Summe also 1023 heraus.
Um jetzt zu prüfen, ob ein einzelner Schalter an ist, reicht folgendes Konstrukt:
Viele Grüße,
Martin
ich habe es jetzt selber mal versucht - war aus der Erinnerung heraus, mal was dazu gelesen gehabt zu haben.
War leider falsch! Man kann so nicht bitweise setzen, aber bitweise abfragen!!
Sieh Dir mal die Hilfe an zum Thema []Operator (-> Beispiel 3) und $Operator (-> Beispiel 3)!
Wenn Du eine Zahl hast, kannst Du bitweise prüfen, ob das jeweilige Bit gesetzt ist oder nicht!
Also bei Deinem Beispiel oben:
Code: Alles auswählen
10 Buttons:
2^0 = 1
2^1 = 2
2^2 = 4
2^3 = 8
2^4 = 16
2^5 = 32
2^6 = 64
2^7 = 128
2^8 = 256
2^9 = 512
Um jetzt zu prüfen, ob ein einzelner Schalter an ist, reicht folgendes Konstrukt:
Code: Alles auswählen
FOR nI := 1 to 10
IF nOptions[ nI ]
...
ENDIF
NEXT
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16509
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Ha,
es geht doch - habe noch ein wenig gespielt...
Man darf jedoch nicht bitweise setzen mit 1 oder 0, sondern mit .t. oder .f.!
Also:
ACHTUNG!! Das geht nur, wenn nOptions auch definiert wurde - als local oder static! Private und public gehen nicht!
Viele Grüße,
Martin
es geht doch - habe noch ein wenig gespielt...
Man darf jedoch nicht bitweise setzen mit 1 oder 0, sondern mit .t. oder .f.!
Also:
Code: Alles auswählen
nOptions := 0
nOptions[4] := .t.
nOptions[3] := .t.
? nOptions
? nOptions[2]
? nOptions[3]
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Hi Martin,
ich bin ganz ehrlich, das ist mir im Moment nicht verständlich. Laß uns am Samstag darüber reden. Dann liegt der Quellcode auch vor und ihr könnt sehen, was ich warum wie mache.
ich bin ganz ehrlich, das ist mir im Moment nicht verständlich. Laß uns am Samstag darüber reden. Dann liegt der Quellcode auch vor und ihr könnt sehen, was ich warum wie mache.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hi,
ganz ehrlich habe ich mich die ganze Zeit gefragt, warum du den Aufwand mit BITs treiben willst. Bei den heutigen Speicherausstattungen (und früher auch schon) habe ich sowas immer in einem String erledigt:
aber was ich da von Martin lese haut mich direkt vom Hocker, dass man auf die einzelnen BITs direkt zugreifen kann ist mir absolut neu. Wo hast du das wieder gefunden
Martins Lösung ist natürlich wesentlich eleganter und sicher auch schneller.
ganz ehrlich habe ich mich die ganze Zeit gefragt, warum du den Aufwand mit BITs treiben willst. Bei den heutigen Speicherausstattungen (und früher auch schon) habe ich sowas immer in einem String erledigt:
Code: Alles auswählen
Ich brauche 12 Stellen ... und nehme 12 Byte:
cVar := StrZero(0,12,0) // 12 Schalter ausgeschaltet.
if cVar[4]="1" // 4. Schalter ein ?
...
else
...
etc.
Martins Lösung ist natürlich wesentlich eleganter und sicher auch schneller.
Zuletzt geändert von brandelh am Mi, 27. Feb 2008 9:05, insgesamt 2-mal geändert.
Gruß
Hubert
Hubert
- Manfred
- Foren-Administrator
- Beiträge: 21186
- Registriert: Di, 29. Nov 2005 16:58
- Wohnort: Kreis Wesel
- Hat sich bedankt: 210 Mal
- Danksagung erhalten: 67 Mal
Leute,
ich klinke mich jetzt hier aus.
Ich verstehe immer weniger......
Ich verstehe immer weniger, was eure Vorschläge mit meiner Lösung gemeinsam haben sollen? Mit anderen Worten:
ICH BLICKE NICHT MEHR DURCH!!!
ich klinke mich jetzt hier aus.
Ich verstehe immer weniger......
Ich verstehe immer weniger, was eure Vorschläge mit meiner Lösung gemeinsam haben sollen? Mit anderen Worten:
ICH BLICKE NICHT MEHR DURCH!!!
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
- Martin Altmann
- Foren-Administrator
- Beiträge: 16509
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Hubert,
ist wohl auch "relativ" frisch - erst seit einigen Jahren möglich, glaube ich!
Hatte ich mal in der Newsgroup gelesen...
Aber es gibt halt die Einschränkungen, die ich oben schrieb (Variablentyp).
Viele Grüße,
Martin
ist wohl auch "relativ" frisch - erst seit einigen Jahren möglich, glaube ich!
Hatte ich mal in der Newsgroup gelesen...
Aber es gibt halt die Einschränkungen, die ich oben schrieb (Variablentyp).
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
@Manfred,
was gibt es daran nicht zu verstehen ?
nZahl := 0 erzeugt eine Integer Variable (da keine Nachkommastellen angegeben bzw. nötig.)
nZahl[0] oder nZahl[1] (weiß ich jetzt gar nicht) greift auf des erste Bit zu etc.
wenn bei nZahl := 0 das erste Bit gesetzt wird, wird der Wert der Zahl 1.
Wird nur das 2. Bit gesetzt, wird es 2, wenn das erste und das 2. Bit gesetzt sind, gibt es 3 ...
Nur Rechnen sollte man nicht mit solchen Zahlen, denn dann könnte es eventuell passieren dass es keine Integer mehr ist sondern eine Gleitkommazahl wird. Wie die sich verhalten weiß ich auch nicht.
Eine Integer von Xbase++ hat immer 32 bit zur Verfügung.
was gibt es daran nicht zu verstehen ?
nZahl := 0 erzeugt eine Integer Variable (da keine Nachkommastellen angegeben bzw. nötig.)
nZahl[0] oder nZahl[1] (weiß ich jetzt gar nicht) greift auf des erste Bit zu etc.
wenn bei nZahl := 0 das erste Bit gesetzt wird, wird der Wert der Zahl 1.
Wird nur das 2. Bit gesetzt, wird es 2, wenn das erste und das 2. Bit gesetzt sind, gibt es 3 ...
Nur Rechnen sollte man nicht mit solchen Zahlen, denn dann könnte es eventuell passieren dass es keine Integer mehr ist sondern eine Gleitkommazahl wird. Wie die sich verhalten weiß ich auch nicht.
Eine Integer von Xbase++ hat immer 32 bit zur Verfügung.
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16509
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Äh, Manfred,
Du wolltest die einzelnen Schalter mit Zahlen darstellen (1, 2, 4, 8, ...) und die angeschalteten Schalter durch die Summe der jeweiligen Zahlen (9 = Schalter 1 und Schalter 4).
Dies ist einfache Binärdarstellung.
Schalter 1 ist 2^0 - also das erste Bit (von rechts)
Schalter 4 ist 2^3 - also das vierte Bit (von rechts) entspricht dem o.g. Einschalten der beiden Bits. In nOptions steht dann das Ergebnis 9 (wenn vorher alles aus war).
Aber gerne weiteres am Samstag nach div. Bierchen...
Viele Grüße,
Martin
- ganz einfach: AllesManfred hat geschrieben:Ich verstehe immer weniger, was eure Vorschläge mit meiner Lösung gemeinsam haben sollen?
Du wolltest die einzelnen Schalter mit Zahlen darstellen (1, 2, 4, 8, ...) und die angeschalteten Schalter durch die Summe der jeweiligen Zahlen (9 = Schalter 1 und Schalter 4).
Dies ist einfache Binärdarstellung.
Schalter 1 ist 2^0 - also das erste Bit (von rechts)
Schalter 4 ist 2^3 - also das vierte Bit (von rechts)
Code: Alles auswählen
nOptions[1]:=1
nOptions[4]:=1
Aber gerne weiteres am Samstag nach div. Bierchen...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.