![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Veteran
![]() Registriert seit: 13.07.2002
Alter: 44
Beiträge: 242
|
![]() 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 |
![]() |
![]() |
![]() |
#2 |
Veteran
![]() |
![]() ja mit welcher sprache willst du's denn programmieren?
aber generell gesprochen bietet sich wohl ein binäres AND an.
____________________________________
religion is a virus from outer space |
![]() |
![]() |
![]() |
#3 |
Veteran
![]() Registriert seit: 13.07.2002
Alter: 44
Beiträge: 242
|
![]() In Java.
Je nach dem welche Binärkombination es ist, soll dann folgendes angezeigt werden Mo Di Mi Do Fr Mo Di Sa usw............ |
![]() |
![]() |
![]() |
#4 |
Veteran
![]() |
![]() 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"
____________________________________
religion is a virus from outer space |
![]() |
![]() |
![]() |
#5 |
Inventar
![]() Registriert seit: 13.06.2001
Beiträge: 1.830
|
![]() 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. 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; 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>
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona) Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing. \"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra) |
![]() |
![]() |
![]() |
#6 |
Veteran
![]() Registriert seit: 13.07.2002
Alter: 44
Beiträge: 242
|
![]() 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. |
![]() |
![]() |
![]() |
#7 |
Inventar
![]() Registriert seit: 13.06.2001
Beiträge: 1.830
|
![]() 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.
____________________________________
Join the DNRC | Godwin\'s Law (thx@stona) Documentation is like sex: If it\'s good, it\'s very, very good. If it\'s bad, it\'s better than nothing. \"In theory, theory and practice are the same. In practice, they are not\" (Lawrence Berra) |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|