Binärzahlen eingeben???



  • Hallo,

    kleines Problem:

    Hexwerte kann ich einfach zuweisen, z.B.

    int iZahl = 0xA9;
    

    Mit 'o' funktioniert das ganze auch oktal, wie aber gebe ich Binärzahlen ein?
    Mit 0b0011010 jedenfalls nicht 😞

    Gruß und Danke.



  • Geht nicht über Literale...



  • Ein bitset.



  • Danke. Bitset ist ein guter Tip. Hätte ich nicht gedacht, das man für "so eine Kleinigkeit" Templates bemühen muss 😮



  • In C++ geht das nicht so einfach da man es nicht als einfache Zahl angeben kann. Eine Möglichkeit die ich hin und wieder mal benutze ist:

    #define Bin(a,b,c,d,e,f,g,h) ((a<<7)|(b<<6)|(c<<5)|(d<<4)|(e<<3)|(f<<2)|(g<<1)|h)
    //...
    char a=Bin(1,0,1,0,0,1,1,0);
    

    Ich glaub nicht, dass das ohne run-time overheat besser machbar ist. Lass mich aber gern belehren.



  • Jetzt wo ich drüber nachdenke wäre das wohl doch besser 😃 :

    #define Bin(n) (((n/1)%10)<<0| \
                    ((n/10)%10)<<1| \
                    ((n/100)%10)<<2| \
                    ((n/1000)%10)<<3| \
                    ((n/10000)%10)<<4| \
                    ((n/100000)%10)<<5| \
                    ((n/1000000)%10)<<6| \
                    ((n/10000000)%10)<<7| \
                    ((n/100000000)%10)<<8| \
                    ((n/1000000000)%10)<<9| \
                    ((n/10000000000)%10)<<10|\
                    ((n/100000000000)%10)<<11|\
                    ((n/1000000000000)%10)<<12|\
                    ((n/10000000000000)%10)<<13|\
                    ((n/100000000000000)%10)<<14|\
                    ((n/1000000000000000)%10)<<15)
    //...
    int a=Bin(101101);
    

    Sollte alles at compile-time errechnet werden.



  • Irgendwer schrieb:

    int a=Bin(101101);[/cpp]

    Nehmen wir an:

    int a=Bin(101101);
    int b=Bin(010010);
    

    Irgendwie suboptimal 😉



  • MaSTaH schrieb:

    Geht nicht über Literale...

    ...aber gut mit Templates:

    template <int Value> struct is_binary_digit;
    
    template <> struct is_binary_digit<0> { enum {Result = 0}; };
    template <> struct is_binary_digit<1> { enum {Result = 1}; };
    
    template <int Value> struct binary;
    
    template <> struct binary<0> { enum {Result = 0}; };
    
    template <int Value> struct binary
    {
     enum {Result = is_binary_digit<Value%10>::Result + 2 *
    binary<Value/10>::Result};
    };
    
    int main()
    {
        int i = binary<101>::Result;
        cout << i << endl;   // 5
    
    }
    


  • Du hast ja da Hexzahlen angegeben...

    Soweit ich weis, werden Binär-Variablen/Konstanten mit "0%" initialisiert...

    Des wäre dann z.B. :

    const int a=0%01001011
    weis nicht, ob das sk ganz zulässig ist...

    Dem Prinzip nach geht's so in etwa...



  • BloodLord schrieb:

    Du hast ja da Hexzahlen angegeben...

    Soweit ich weis, werden Binär-Variablen/Konstanten mit "0%" initialisiert...

    Der 1. April ist lange vorbei 👎



  • BloodLord schrieb:

    const int a=0%01001011
    weis nicht, ob das sk ganz zulässig ist...

    nicht in c++. afair gabs assembler, die so ähnliches nehmen.

    bei
    const int a=0%01001011;
    macht er folgendes:
    - % ist der modulo-operator
    - integer-literale, die mot 0 anfangen, aber nicht mit 0x sind okal.
    also
    const int a=0%01001011;

    const int a=0%262665;

    const int a=0;


Anmelden zum Antworten