Per Befehl 0 in 1 umwandeln und umgekehrt?!

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Per Befehl 0 in 1 umwandeln und umgekehrt?!

Beitrag von nco2k »

hi,

ich bräuchte einen befehl, mit dem ich eine variable mit dem wert 0, in eine variable mit dem wert 1 umwandeln kann und auch andersrum. gibt es überhaupt sowas?? vielleicht über das winapi?!

c ya,
nco2k
Benutzeravatar
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

Beitrag von NicTheQuick »

Code: Alles auswählen

a = 1
Debug a
a ! 1
Debug a
a ! 1
Debug a
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Auf diese Weise kannst Du auch zwischen beliebigen zwei anderen Werte hin- und herspringen, z.B.:

Code: Alles auswählen

a = 20
Debug a 
a ! 4
Debug a 
a ! 4
Debug a 
(liefert 20, 16, 20)
Du musst nur vorher einmal testen, ob das zuerst angewandte XOR den Wert 'addiert', oder 'subtrahiert'. Setzt man z.B. für a 19, ergibt sich ein anderes Verhalten : (19, 23, 19).
!UD2
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Froggerprogger hat geschrieben:Auf diese Weise kannst Du auch zwischen beliebigen zwei anderen Werte hin- und herspringen, z.B.:

Code: Alles auswählen

a = 20
Debug a 
a ! 4
Debug a 
a ! 4
Debug a 
Das dürfte aber auch nur mit 2er-Potenzen als zweite Zahl funktionieren was die Sache doch wieder etwas einschränkt ;-)
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
wichtel
Beiträge: 150
Registriert: 09.09.2004 08:35
Wohnort: Hattersheim

Beitrag von wichtel »

Und jetzt noch das Beispiel aus der Hilfe. Wenn man sich die Binär Werte anschaut wird das Verhalten auch klar un einfach.

Code: Alles auswählen

! Bitweises XOR. Sie sollten sich mit Binär-Zahlen auskennen, wenn Sie diesen Operator benutzen. Das Ergebnis dieses Operators ist der Wert des Ausdrucks auf LS, durch 'XOR' (Exklusives Oder) verknüpft mit dem Wert des Ausdrucks auf RS, und dies Bit für Bit. Der Wert jedes Bits wird entsprechend der nachfolgenden Tabelle gesetzt. Wird das Ergebnis des Operators nicht benutzt und es befindet sich eine Variable auf LS, dann wird das Ergebnis des Ausdrucks direkt in dieser Variable gespeichert. Dieser Operator kann nicht mit Variablen vom Typ 'String' benutzt werden.

 LS  | RS  | Ergebnis
---------------------
  0  |  0  |    0
  0  |  1  |    1
  1  |  0  |    1
  1  |  1  |    0
Beispiel:
; Zeigt die Benutzung mit Binär-Zahlen, da es so leichter ist, das Ergebnis zu sehen
a.w = %1000 ! %0101 ; Ergebnis wird %1101 sein
b.w = %1100 ! %1010 ; Ergebnis wird %0110 sein
bits = a ! b ; verknüpft jedes Bit von a und b durch XOR und benutzt das Ergebnis mit dem 'Gleich' Operator
a ! b ; verknüpft jedes Bit von a und b durch XOR und speichert das Ergebnis direkt in der Variable "a"  
PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Das dürfte aber auch nur mit 2er-Potenzen als zweite Zahl funktionieren was die Sache doch wieder etwas einschränkt
Ach herrjott /:->
Schlagartig fallen mir die Schuppen von den Augen.
Ich hab vor meiner Antwort leider nicht über das 'warum' nachgedacht.
(OBWOHL ich kurz stutzig wurde, dass man ja so im Prinzip per XOR addieren könnte, tststs...)

Also, hier die korrigierte Version:
Man kann zwar zwischen allen Zahlenpaaren hin- und herswitchen, aber nicht immer mit dem Absolutbetrag ihrer Differenz (wäre ja auch zu schön), sondern mit derjenigen Zahl, welche man wie folgt erhält:

Code: Alles auswählen

; hin- und herspringen zwischen Wert a und b mit jeweils einer Programmierzeile:
a = 21 
b = 57
switchval = a!b

Debug a 
a ! switchval ; nun erhält a den Wert b
Debug a 
a ! switchval ; nun erhält a wieder seinen ursprünglichen Wert
Debug a 
!UD2
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

vielen dank jungs! :allright:

c ya,
nco2k
Antworten