beee: bester Datentyp für 00110100001

Guten Morgen,

kann mir einer sagen, welcher Datentyp der beste ist für die
Speicherung eines langen Wertes (ca. 60 Stellen), welcher nur aus
Nullen oder Einsen besteht? Vielen Dank.

Der Beee.

  1. hi,

    kann mir einer sagen, welcher Datentyp der beste ist für die
    Speicherung eines langen Wertes (ca. 60 Stellen), welcher nur aus
    Nullen oder Einsen besteht? Vielen Dank.

    du könntest einen entsprechend langen string-typ nehmen - oder aber auch ein 64-bit integer.

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. Dankeschön,
      bei dem integer gehen aber sicher führende Nullen verloren,
      nicht wahr? Das war zumindest meine bisherige Erfahrung, so wird es
      wohl der String sein.

      Gruß, der Beee.

      1. hi,

        bei dem integer gehen aber sicher führende Nullen verloren,
        nicht wahr?

        da kannst du eine so große _dezimal_zahl sowieso nicht reinspeichern, du müsstest also vorher von binär nach dezimal umwandeln.
        dabei bekommst du natürlich dann auch beim zurück-wandeln deine "führenden nullen" wieder zurück (bei einem 64-bit-int zwar noch vier mehr als die 60 stellen, aber die könnte man ja ignorieren).

        Das war zumindest meine bisherige Erfahrung, so wird es
        wohl der String sein.

        sei dir aber im klaren, dass das ca. 7,5 mal mehr speicherplatzbedarf bedeutet.

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. Hallo,

          das habe ich probiert, bzw. das war die ursprüngliche Idee. Wenn ich
          aber die Zahlenfolge mit bindec() (PHP) umwandele erhalte ich die
          Zahl 3.6028797018964E+016. Diese lässt sich aus unerfindlichen Gründen
          nicht wieder mit decbin() ins Ursprungsformat zurückwandeln. Oder habe
          ich hier einen Denkfehler?

          Gruß beee.

          1. hi,

            das habe ich probiert, bzw. das war die ursprüngliche Idee. Wenn ich
            aber die Zahlenfolge mit bindec() (PHP) umwandele erhalte ich die
            Zahl 3.6028797018964E+016.

            ja, weil die zahl zu groß ist, als dass PHP sie als integer darstellen könnte.

            Diese lässt sich aus unerfindlichen Gründen
            nicht wieder mit decbin() ins Ursprungsformat zurückwandeln.

            decbin() erwartet als parameter eine integer-zahl, deine obige ist aber keine solche.

            Oder habe ich hier einen Denkfehler?

            bei so großen (binär-)"zahlen" würde ich doch empfehlen, sie in PHP nur als strings zu behandeln, sofern sie nicht wirklich als zahlen zum "rechnen" gebraucht werden, sondern beispielsweise nur binäre eigenschaften speichern sollen. vorschlag dazu zu abspeicherung in mysql siehe https://forum.selfhtml.org/?t=98028&m=597377.
            sie in PHP als string zu behandeln hätte darüber hinaus noch den vorteil des einfachen zugriffs auf die einzelnen "bits" über $binaerstring{stellenindex}, ohne irgendwelche bitoperatoren benutzen zu müssen. (aber auch den "nachteil", dass sie eben in PHP zur speicherung auch wieder 60 byte statt nur 8 brauchen würden.)

            gruß,
            wahsaga

            --
            "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
            1. Hello,
              vielen Dank für die Hilfe.

              Gruß Beee.

  2. Hi,

    einfach wie schon von wahsaga einen 64-Bit-Integer oder was ähnliches - ist zumindest das platzsparendeste. Hier stehen (64/8) 8 Byte gegen 64 Byte (String) bzw. 128 Byte (Unicode-String)...

    Ich vermute mal du bist dem Integer abgeneigt, weil du nicht weißt, wie du hier die einzelnen Einsen bzw. Nullen wieder rauskriegst - aber im Grunde ist das ganz einfach:

    1 or 2 or 4 or 8 or 32 == 2^0(=1) + 2^1(=2) + 2^2(=4) + 2^3(=8) + 2^5(=32) == 111101

    Weiterhin brauchst du noch XOR- und AND-Verknüpfungen, näheres steht dazu in zahllosen Dokumentationen, wenn die deiner Datenbank nicht ausreicht (PHP-Dokumentation, MSDN...)

    E7

    1. hi,

      Ich vermute mal du bist dem Integer abgeneigt, weil du nicht weißt, wie du hier die einzelnen Einsen bzw. Nullen wieder rauskriegst - aber im Grunde ist das ganz einfach:

      je nach DB-system stehen dafür ja u.U. auch schon funktionen zur verfügung, bei mysql bspw. BIN() bzw. CONV(). wäre aber noch zu klären, ob die auch mit so "langen" binärzahlen umgehen können, bzw. wie die übergabe aussieht (string oder dezimalzahl, letzteres würde die verarbeitung in bspw. PHP komplizieren).

      gruß,
      wahsaga

      --
      "Look, that's why there's rules, understand? So that you _think_ before you break 'em."