Habe mir eine Chipkarte gekauft und steuer diese an.
bei dem Wert
1 gibt er kontakt 1 frei
2 gibt er kontakt 2 frei
3 gibt er kontakt 1 + 2 frei
4 gibt er kontakt 3 frei
5 gibt er kontakt 1 und 3 frei
6 gibt er kontakt 1 + 2 + 3 frei
usw...
wie berechne ich das am besten??
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ich denke mal auch, dass es sich dabei um ein Bitset handelt.
Bevor die Frage kommt. Wie kannst du Bits setzen.
Code:
Blah := Blah or$01;
Blah := Blah or$02;
Blah := Blah or$04;
Damit setzt du das erste, zweite und dritte Bit. Bitte beachte, dass Bits nicht Dezimalstellen sind.
Einzelne Bits kannst wie folgt abfragen.
Code:
if Blah and$01 > 0then
// Mach was.
Hier könntest du auch abfragen ob eines der angegebenen Bits gesetzt oder alle Bits. Das lässt sich ganz einfach mit der Abfrage regulieren.
Es gibt auch noch andere Möglichkeiten so etwas abzufragen. Zum Beispiel in einer Schleife.
Code:
Idx :=0;
while blah > 0dobegin
if Blah and$01 > 0then
// Mach was mit Idx
Idx := Idx +1;// Index um eins erhöhen.
Blah := Blah shr1;// Alle Bits um 1 nach rechts verschieben
end;
Damit würdest du zum Beispiel durch ein Bitset gehen und alle gesetzten Bits extrahieren. Es wird zwar immer nur das erste Bit geprüft aber durch den Index weiß man ziemlich genau welches es war. Und das dann auch dezimal.
Ist Extended nicht ein Fließkommatyp - solltest da nicht besser ein Cardinal oder entsprechendes eingesetzt werden? Die lassen scih auch in Bytes Casten.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Musst du die Bits in dem Extended abfragen oder ist der Wert der in dem Extended abgespeichert wird wichtig? Wenn der Wert wichtig ist, dann kannst du mit Round arbeiten. Wenn aber die Bits wichtig sind musst du es in etwa so machen.
Code:
pByte(@ExtendedVar)^
Dabei wird aber der Inhalt benutzt und nicht der Wert. Das ist nicht unwichtig. Glaube ich.
Also bei der karte gibts vier ports mit jeweils 8 kontakten.
Ich kann die kontakte ausschalten und anschalten indem ich die werte in nem array[1..4] of byte ändere
aber für binärzahlen rechnet man doch 2 hoch nicht mit der FPU... 2 Hoch lässt sich doch ganz einfach mit shift right (shr), bzw. shift left (shl) bewerkstelligen. Jetzt frag mich grad nicht, in welche Richtung man auf Intel Maschienen schieben muss, aber probiers doch mal so: r := 1 shr (kontakt - 1). Wenn shr das falsche macht, dann probier shl.
Also habe jetzt shr reingemacht.
Nur funktioniert es nicht viel besser wie mit Power.
Also es geht, aber er überspringt da den ersten Kontakt.
also bei 2 shl (kontakt - 1) kommt 2 raus, sollte nich bei 2^0 immer 1 rauskommen?
Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.