Bit Abfrage
Übersicht

![]() |
StarGazerBetreff: Bit Abfrage |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
hoffe daß die Bezeichnung richtig ist ^^ Ich würde gerne wissen wie man abfragen kann, ob ein Bit nicht vorhanden ist. also in kann in ein Byte x Werte einschreiben Code: [AUSKLAPPEN] Variable = 8|16|64
dann abfragen ob dieser auch gesetzt sind Code: [AUSKLAPPEN] If Variable & 64 And Variable & 8 then
Aber wie kann man denn abfragen ob sie nicht vorhanden sind ? |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
"Not" nutzen?
Beispiel: BlitzMax: [AUSKLAPPEN] If Not (a & 64 Or a & 8) ... 'Die Bits für 64 und 8 dürfen hier nicht gesetzt sein. Wenn das nicht stimmt, musst du wohl dein Problem noch einmal erklären. mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke, es functioniert, aber scheint nicht immer ?
BlitzMax: [AUSKLAPPEN] If Not (a & 8) And Not (a & 64) Then oder wäre es so besser ? BlitzMax: [AUSKLAPPEN] If Not (a & 8 And a & 64) Then Aber ist denn Not ein gute Lösung ?. Ich dachte man sollte Not immer meiden weil langsam ? |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Warum sollte Not langsam sein ?
Es wandelt doch nur = 0 zu 1 und <> 0 zu 0. (das binäre Not ist ~ ) Welche Deiner beiden Varianten die "richtige" ist, hängt davon ab, was Du erzielen möchtest. Sie bringen ja unterschiedliche Resultate. Aber wenn das Ergebnis nicht das ist, was Du erwartest, dann ist es vermutlich die andere Variante. ![]() 1) Zitat: Ja und Ja = Nein
Ja und Nein = Nein Nein und Nein = Ja 2) Zitat: Ja und Ja = Nein
Ja und Nein = Ja Nein und Nein = Ja Um noch einmal Deine Startfrage aufzugreifen: BlitzMax: [AUSKLAPPEN] If Variable & 64 And Variable & 8 Then ..Abfragen, ob sie nicht gesetzt sind: BlitzMax: [AUSKLAPPEN] If ( Variable & 64 And Variable & 8 ) = 0 Then ..Was dann wiederum Variante 2) entsprechen würde. ![]() |
||
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die zweite Variante hat auch nicht functioniert ^^
ok, meine war dann doch etwas anderes BlitzMax: [AUSKLAPPEN] If x = False And y = False And .. obwohl "a & 8 = True" war, ist er dennoch in das If reingegangen. So ganz genau verstehe ich das nicht warum. Nach deinen Zitaten vieleicht nun doch ![]() Ich habe bisher noch nie das Not irgendwo benutzt, daher wohl noch so ne Denksperre ![]() Das mit den Klammern ohne Not hatte ich noch nicht probiert, aber ich dachte, das kann kein 0 ergeben, falls noch andere Bits darin gesetzt sind, wodurch die Variable selbst nicht 0 ist. Hab das mit den Klammern ohne Not ausprobiert, doch es functioniert leider auch nicht ^^ BlitzMax: [AUSKLAPPEN] If x = False And y = False And .. x und y sind wirklich False, bevor jetzt die Frage kommt ^^ |
||
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Hehe, dann liegt es nach wie vor an der Logik.
(Wert) & (Flag) ergibt immer entweder (Flag) oder 0. Das ist zb. auch wichtig zu wissen, wenn Du so etwas auf True / False checken möchtest. (Wert) & (Flag) ergibt niemals True (1), es sei denn, die Flag ist = 1. Momentan prüfst Du, ob: ![]() ![]() ![]() Sind diese 3 Bedingungen alle erfüllt, geht er in den IF-Block. Wenn Du willst, dass die Bedingung nur erfüllt ist, wenn keine dieser Flags gesetzt ist, dann musst Du sie jeweils einzeln mit 0 vergleichen. |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
StarGazer hat Folgendes geschrieben: obwohl "a & 8 = True" war, ist er dennoch in das If reingegangen.
Das ist ja logisch (Wortwitz *tusch*) - da du dort ein And stehen hast, überspringt er den If-Block nur, wenn sowohl Flag 8 als auch Flag 64 gesetzt sind. Wenn du willst, dass er den Block überspringt, wenn eines oder zwei der Flags gesetzt sind, muss du ein Or verwenden BlitzMax: [AUSKLAPPEN] If x = False And y = False And .. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
StarGazer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke euch für eure Anworten.
So langsam verstehe ich das Not besser ^^, es scheint wohl auch das Or und das And umzudrehen. Jedoch kriege ich es nicht hin. Nur mit meiner unschönen alten Methode klappt es richtig. BlitzMax: [AUSKLAPPEN] Local a1,a2 Das ist aber eine schlechte Lösung finde ich. All anderen Abfragen machen ab und zu Fehler. Egal wie ich es auch drehe. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group