Zahl als Bitstring hinterlagen



  • Hallo

    Ich würde gerne einen Zahlenwert als bitstring einer Variablen zuweisen

    z.B. so:

    //pseude code:
    int i = 100101b;
    
    // 'b': identifiziert die Zeichenfolge als Binärwert '100101'
    

    Gibt es in (V)C++ eine Möglichkeit dazu?

    Danke & Gruss



  • Ich würds mit einem bitset machen da muss man nix selber denken 🤡

    #include <bitset>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
        bitset<10> myset(string("1001010111"));
        int myint = myset.to_ulong();
        cout << myint;
    }
    


  • Mein Vorschlag wäre da ja Template-Metaprogramming. 😋

    #include <iostream>
    
    template<unsigned long N>
    struct OctalAsBinary
    {
        enum { value = 2*OctalAsBinary<N/8>::value + OctalAsBinary<N%8>::value };
    };
    
    template<> struct OctalAsBinary<0L> { enum { value = 0L }; };
    template<> struct OctalAsBinary<1L> { enum { value = 1L }; };
    
    #define BIN(x) OctalAsBinary< 0##x##L >::value
    
    int main()
    {
        int i = BIN(100101);
    }
    

    Sicher nicht perfekt, weil das Makro und der Funktions-Look nicht ganz Deinem Pseudocode entsprechen, aber viel schöner wird es wohl nicht gehen, und es hat gegenüber der bitset-Lösung den Vorteil, das es zur Compiletime ausgewertet wird. Dafür darf die Zahl i.d.R. nicht mehr als 11 Stellig sein, weil es ja intern erstmal (auf den meisten Systemen) eine 32-Bit-Zahl ist.

    Das Makro und der Umweg sind nötig, weil man ja, wenn man binäre Konstanten schreiben will, mit führenden Nullen arbeitet, und sonst die benutzte Zahl (je nachdem ob eine führende Null geschrieben wurde oder nicht) wahlweise oktal oder dezimal ist. Das Makro erzwingt durch voranstellen einer null oktal und löst das Problem dadurch.



  • Hi,

    suchst du vielleicht soetwas?

    // Parameter: Binärer String wie "0011011"
    // Return: Long-Zahlenwert
    long frombin(const string &bin) {
        long e = 0;
        for (char i = 0 ; i < bin.length() ; ++i) {
            e <<= 1;
            e += bin[i]-'0';
        }
        return e;
    }
    

    Greetz,
    Neo


Log in to reply