Wie viele Bits um Uhrzeit zu speichern?

5 Antworten

Die Frage lässt vieles offen, z.B. die Frage, wie das gespeichert werden soll.

Du könntest die Sekunden des Tages speichern. Ein Tag hat 86400 Sekunden, somit bräuchtest Du dafür 17 Bit - was eine ungerade Zahl ist und nicht so schön zum Rechnen. Außerdem hättest Du viele ungenutzte mögliche Werte.

Du könntest jede Stelle mit 4 Bit speichern. Dann bräuchtest Du 24 Bit. Ist zwar mehr als die 17 Bit oben, aber Du könntest das dann in 3 Byte jeweils in einem Nibble speichern - damit könnte man dann schick rechnen und wenn man es kann, sogar die Zeit direkt ablesen.


pusteblume3001 
Beitragsersteller
 22.11.2021, 15:11

17 war einer der Antworten =). Das mit den 4 Bit "Päckchen" ist auch keine schlechte Idee! Danke!

0

24 h á 60 min á 60 sec

24 *60 *60 = 86400 als Binärzahl 1 0101 0001 1000 0000 -17 Stellen

24 als Binärzahl 1 1000 5 Stellen

60 als Binärzahl 11 1100 6 Stellen einzeln sind am Ende auch 17 Stellen

Du kannst:

  • Einfach die Sekundenanzahl speichern, und sie dann nach dem Auslesen zu hh:mm:ss umwandeln
  • Die Uhrzeit direkt als String speichern

Ersteres wäre klüger, aber ich gehe mal davon aus, dass du sie als String speichern willst, weil du ja sagst

im Format hh:mm:ss

Da brauchst du dann 8/16 Byte (1 oder 2 Byte pro Zeichen, je nach Programmiersprache) + 1 Byte (für den String selbst. Vorausgesetzt der String hat keine fixe Länge wie es vlt. bei SQL möglich ist).

Also 9 oder 17 Byte =72 oder 136 Bit.

Woher ich das weiß:Studium / Ausbildung – Bachelor in Informatik 👨🏻‍🎓

pusteblume3001 
Beitragsersteller
 22.11.2021, 15:15

Schnell geht das hier! Ja, ich will es als String speicher, experimentiere grad ein bissl rum. Danke!

0
MrAmazing2  22.11.2021, 15:17
@pusteblume3001

Welche Programmiersprache?

Sehe gerade dass JS es schafft nur 1 Byte pro ASCII-Character zu brauchen, während Java immer 2 Byte pro Zeichen braucht.

0

"Richtig" ist relativ. Je nachdem, was du mit der Uhrzeit später noch anstellen willst, können unterschiedliche Lösungen unterschiedlich gut oder schlecht geeignet sein.

Ganz grob fallen mir auch drei Varianten ein:

  1. Als String ("150822"). Vorteil: die Ausgabe ist sehr simpel. Nachteil: du belegst damit 6 Bytes und du kannst damit nicht rechnen.
  2. Binär, getrennt nach h/m/s (15, 8, 22). Vorteil: hm, keine Ahnung, Ausgabe ist minimal Aufwändiger, als beim String, geht aber auch noch. Und du benötigst nur 3 Bytes. Nachteil: du verschwendest Bits - die Zahlen 0-60 ließen sich auch mit weniger Bits darstellen. Das Rechnen mit Uhrzeiten ist immer noch aufwändig.
  3. Binär in einer Zahl in Sekunden. Vorteil: Rechnen ist sehr simpel! Und auch nur 3 Bytes lang, Nachteil: die Ausgabe ist aufwändig. Und auch hier: Bits werden verschwendet.

MrAmazing2  22.11.2021, 15:15

Ein String hat 2 Byte pro Zeichen

0
MrAmazing2  22.11.2021, 15:20
@VanLorry

Stimmt. Stellt sich die Frage, welche Programmiersprache der FS benutzt.

0
MrAmazing2  22.11.2021, 15:22
@VanLorry

Aber hat nicht in jeder Sprache (in der Strings eine Variable Länge haben) ein String noch 1 Byte zusätzlich, der das String-Ende im Speicher angibt?

0
VanLorry  22.11.2021, 15:26
@MrAmazing2

Bei C und C-ähnlichen Sprachen schon, ist aber nicht zwingend.

Zum einen kann die Länge auch in einem extra Längenfeld (1 oder 2 Bytes) der Zeichenkette z.B. vorangestellt sein. Dann brauchst du kein abschließendes Null-Byte. (macht das ganze aber auch nicht kürzer ...)

Oder du verwendest eben Variablen mit fester Länge - die Uhrzeit in diesem Fall umfasst ja immer 6 Ziffern.

1

Der Tag hat 3600*24 Sekunden.

Dafür braucht man log(97000)/log(2) Bits.

Also 17.


pusteblume3001 
Beitragsersteller
 22.11.2021, 15:13

Kurz und Kompakt! Diese war einer meiner Antworten. Die anderen schau ich nochmal drüber, um zum schaun was ich falsch gemacht hab! Danke!

0