WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Kombination von Tagen ? (http://www.wcm.at/forum/showthread.php?t=174314)

Frankster 18.09.2005 21:42

Kombination von Tagen ?
 
Hi!

Folgendes Problem:


Eine timer wiederholung sieht folgendermaßen aus

0000000100000000 = 256 = Montag
0000001000000000 = 512 = Dinstag
0000010000000000 = 1024 = Mittwoch
0000100000000000 = 2048 = Donerstag
0001000000000000 = 4096 = Freitag
0010000000000000 = 8192 = Samstag
0100000000000000 = 16384 = Sontag

Demzufolge ist Montag+ Mittwoch+ Samstag
0000000100000000 = 256
0000010000000000 = 1024
0010000000000000 = 8192
---------------- ----
0010010100000000 = 9472

Wie programmiert man das am besten ?

weil wenn ich mo di, fr kombiniere, dann sieht die Zahl komplett anders aus, als wenn ich nur den montag wähle

und wenn ich jetzt jeden mit jeden vergleiche wird die Abfrageliste unendlich


Mfg
Frankster

helios 19.09.2005 08:40

ja mit welcher sprache willst du's denn programmieren?
aber generell gesprochen bietet sich wohl ein binäres AND an.

Frankster 19.09.2005 09:06

In Java.

Je nach dem welche Binärkombination es ist, soll dann folgendes angezeigt werden

Mo Di Mi Do Fr
Mo
Di
Sa

usw............

helios 19.09.2005 09:39

naja java kann ich nicht, aber wie gesagt mit einem bit-AND (das gibts wohl auch in java) kannst du das machen.

um bei deinem beispiel (0010010100000000 = 9472) zu bleiben, der folgende pseudocode:

Code:

binärkombi = 0010010100000000
if binärkombi AND 0000000100000000 then print "Mo"
if binärkombi AND 0000001000000000 then print "Di"
if binärkombi AND 0000010000000000 then print "Mi"
if binärkombi AND 0000100000000000 then print "Do"
if binärkombi AND 0001000000000000 then print "Fr"
if binärkombi AND 0010000000000000 then print "Sa"
if binärkombi AND 0010000000000000 then print "So"


jak 19.09.2005 10:08

Entweder mit bitweisen Operatoren (&):
Code:

String res;
byte bDatum = (byte) 9472;
byte bMontag = 100000000;
byte bDienstag = 1000000000;
etc.
if ((bDatum & bMontag) == bMontag) res += "Montag";
etc.

oder mit modulo (%) was auch relativ einfach wäre:
Code:

int datum=9472;
int temp = datum;
String res;
if ((temp / 16384) == 1) res = "Sonntag";
temp %= 16384;
if ((temp / 8192) == 1) res += "Samstag";
temp %= 8192;

etc.

Es müsste auch möglich sein mit "shift-rechts" (>>) etwas zu basteln (der >> Operator (a >> b) verschiebt ein Bitmuster a um b Stellen nach rechts, entspricht also Einer Division durch 2^b).

Code sollte funktionieren, muß aber nicht..

jak

<edit>Zu langsam...</edit>

Frankster 19.09.2005 10:47

Hi!

Danke Leute :)

Ich werd mich mal einlesen in Binärkominatorik

@jak
byte bDatum = (byte) 9472;
funktioniert in Java nicht, bzw ich habs noch nicht herausgefunden, weil als Ergebnis 0 raus kommt.

Ich hab da eine kleine Funktion geschrieben die eine Dez in eine Bin Zahl umwandelt.

jak 19.09.2005 18:19

Da hast du natürlich recht, byte = 2^8 d.h. von -127 bis +127 bzw. von 0 bis 255
In deinem Fall kommt Null raus, weil die ersten 8 Bit nicht verwendet werden (==immer 0 sind). Java wirft bei "Illegalen" Typecasts keine Exceptions sondern nimmt den Teil den es verarbeiten kann. In diesem Fall sind das die ersten 8Bit die wie schon erwähnt 0 sind.

Es sollte funktionieren wenn du den >> Operator verwendest:
Code:

String res;
byte bDatum = (byte) 9472 >> 8;
byte bMontag = 1;
byte bDienstag = 10;
etc.
if ((bDatum & bMontag) == bMontag) res += "Montag";
etc.

jak


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag