kostenloser Webspace werbefrei: lima-city


Bits elegant aus Integer extrahieren

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    wrertzu

    Kostenloser Webspace von wrertzu

    wrertzu hat kostenlosen Webspace.

    Hi!

    Ich habe eine MySQL Tabelle in welcher ich zu einem Objekt viele Optionen speichern möchte. Anstatt diese Optionen jetzt aber in 30 boolean Werten zu speichern hab ich gedacht ich kann diese auch einfach zusammen in einem Integer speichern. Funktioniert auch prima:
    OPTION1 = 1;
    OPTION2 = 2;
    OPTION3 = 4;
    OPTION4 = 8;
    OPTION5 = 16;
    OPTION6 = 32;
    OPTION7 = 64;
    OPTION8 = 128;
    OPTION9 = 256;
    OPTION10 = 512;
    [...]
    options = OPTION5 | OPTION7 | OPTION10;  //Hat jetzt den Integer-Wert 592

    Jetzt aber das Problem: Wie kann ich die Optionen mit möglichst elegantem und aussagekräftigen Code wieder auslesen? Im Moment habe ich folgendes:

    for(i=0; i<32; i++){
      if((options) & (1<<(i))){ //Testen ob bit an Stelle i gesetzt ist
        switch(i){
          case 0:
    	echo "Option 1 was selected";
    	break;
          case 1:
    	echo "Option 2 was selected";
    	break;
          case 2:
    	echo "Option 3 was selected";
    	break;
          case 3:
    	echo "Option 4 was selected";
    	break;
    [...]
          case 31:
    	echo "Option 32 was selected";
    	break;
        }
      }
    }


    Das ist aber meiner Meinung nach nicht sehr elegant und auch nicht super aussagekräftig (für wenn ich mich später wieder in den Code reinlesen muss). Besser wäre es wenn ich irgendwie die OPTIONX-Konstanten wieder in den zweiten Codeabschnitten bringen könnte. Gibt es speziell für dieses Problem eine bessere Lösung?

    Danke,

    Wrertzu

    Beitrag zuletzt geändert: 1.4.2012 19:38:57 von wrertzu
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hast du dir den MySQL Datentyp SET schonmal angeschaut? Der dürfte dir viel Arbeit abnehmen:
    http://dev.mysql.com/doc/refman/5.6/en/set.html

    Alternativ wäre es sinnvoll sich für jede Option entsprechende Konstanten zu definieren
    const int DASISTTOLL = 1024;


    Und dann an den entsprechenden Stellen einfach
    if( config & DASISTOLL ) {}

    abfragen.

    Beitrag zuletzt geändert: 1.4.2012 20:04:42 von bladehunter
  4. Autor dieses Themas

    wrertzu

    Kostenloser Webspace von wrertzu

    wrertzu hat kostenlosen Webspace.

    bladehunter schrieb:
    if( config & DASISTOLL ) {}[/code]


    SET wollte ich aus verschiedenen Gründen vermeiden, aber genau das habe ich gesucht! Manchmal sieht man den Wald vor lauter Bäumen nicht.

    Danke vielmals!
  5. claushoffmann

    claushoffmann hat kostenlosen Webspace.

    Wie wäre es alternativ mit:


    for(i=0; i<32; i++){
      if((options) & (1<<(i))) { //Testen ob bit an Stelle i gesetzt ist
    	echo "Option " + (i +1) + " was selected";
        }
      }


    Je nach Prog-Sprache andere String zusammenführungszeichen statt + verwenden.
    Und (i+1) nur wenn Optionen bei 1 anfangen sollen. Ansonsten nur i statt (i+1) verwenden.



    Beitrag zuletzt geändert: 9.5.2012 15:36:13 von claushoffmann
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!