Autor | Thema: Bitweises Nicht |
| Datum:17.11.01 15:30 
(Dominik.Reichl@swp-net.de) | |
Hallo
gibt es in Profan eigentlich einen Operator für ein bitweises/binäres Nicht?????
Vielen Dank im Vorraus
Dominik
|
|
| Datum:19.11.01 08:23 
(schmidts@flat2serv.de) | |
Auszug aus der Hilfe, wenn nach "Bitweise" gesucht wird:
"
ACHTUNG: logisch bedeutet, daß das Ergebnis wahr (1) oder falsch (0) ist, bei binären Funktionen werden die Werte bitweise verknüpft:
2 OR 4 ergibt 1, weil mindestens einer der Werte <> 0 (= wahr) ist
@OR(2,4) ergibt 6: %0010 OR %0100 = %0110
"
Mfg.
Sven Schmidts
|
|
| Datum:19.11.01 20:13 
(Dominik.Reichl@swp-net.de) | |
?????????????????????????????????
?????????????????????????????????
?????????????????????????????????
Ich fragte nicht nach irgendetwas bitweisem sondern nach einem: Bitweises "Nicht!" ("Nicht" im Sinne von Operator!)
Aus 0xAAAA muss zum Beispiel 0x5555 werden.
In C++ heisst der Operator auch "Ones Complement Operator" oder "bitwise complement" und dort schreibt man das meistens so:
y = ~y;
In Profan gibts ja jede Menge bitweise arbeitende Operatoren wie Und, Oder, u.s.w. Aber ein "bitweises Nicht" gibt es nicht?
Mfg
Domink
|
|
| Datum:19.11.01 22:16 
(b.kuenzel@chello.at) | |
Hallo Dominik,
Bitweise "NICHT!" ist auch in Profan möglich!!!!
versuche es mit
Print Hex$(XOR($AAAA,$FFFF))
beim zweiten Parameter müssen alle Bits gesetzt sein
MFG
Bernhard
|
|
| Datum:20.11.01 18:57 
(Dominik.Reichl@swp-net.de) | |
Hallo
Vielen Dank Bernhard, so gehts tatsächlich auch.
Aber einen "direkten" Operator gibt es nicht?
Danke
Dominik
|
|
| Datum:20.11.01 20:26 
(joerse@gmx.de) | |
Hallo,
Du könntest Dir mit Def 'ne eigene Funktion basteln:
Def BitNot(Hex$(XOR(&(1),&(2)))) 'Wenn ich's richtig verstanden habe
Gruß
Jörg
|
|
| Datum:20.11.01 21:31 
(b.kuenzel@chello.at) | |
Hallo Dominik,
Es geht mit einer Funktion
Def OCO(1) XOR(&(1),Val(Add$("$",MkStr$("F",Len(Hex$(&(1)))))))
Beispiel:
Print OCO(11184810)
Print Hex$(OCO(11184810))
Print Hex$(OCO(Val("$AAAAAA")))
Die Anzahl der notwendigen gesetzten Bits wird für die Maske in der Funktion automatisch berechnet.
MFG
Bernhard
|
|
| Datum: 27.11.01 15:20 
(b.kuenzel@chello.at) | |
Hallo Dominik,
hatte bei der Funktion leider einen großen Gedankenfehler, da ich die Maske mit Hex$ erzeugte funktioniert das nur bei einer geraden Anzahl Bits, die Maske muß mit Bit$ erzeugt werden, dann funktioniert sie bei jeder Anzal von übergebenen Bits.
Hier die neue gültige Funktion.
Def OCO(1) XOR(&(1),Val(Add$("%",MkStr$("1",Len(BIN$(&(1)))))))
Test:
Print OCO(19) 'Übergabe mit ungerader Anzahl an Bits (5) 19=10011 ->Ergebnis 12=1100
Print OCO(53) 'Übergabe mit gerader Anzahl an Bits (6) 53=110101 ->Ergebnis 10=1010
MFG
Bernhard
|
|