binär



  • Wie kann ich in C++ einen Wert als Binäre Zahl ausgeben?

    mfg



  • z.b. mit _itoa. ist aber C...

    oder selber machen 😉



  • oder du rechnest es selber aus -.-

    (dez) 124

    124 : 2 = 62 Rest 0
    62 : 2 = 31 Rest 0
    31 : 2 = 15 Rest 1
    15 : 2 = 7 Rest 1
    7 : 2 = 3 Rest 1
    3 : 2 = 1 Rest 1
    1 : 2 = 0 Rest 1

    (bin) 1111100



  • Oder du verwendest bitsets:

    typedef bitset<numeric_limits<int>::digits> bin_val;
    
    bin_val value(4711);
    cout<<value;
    




  • int a = 124;
    
    int bits = 8 * sizeof(a);
    
    for(int j = bits -1; j >= 0; --j) {
    	if(a & (1 << j))
    		cout << "1";
    	else cout << "0";
    }
    
    cout << "   <- Als Bitzahl mit " << bits << " Bits - Dezimal ist " << a  << endl;
    


  • Eine weitere sehr schöne Möglichkeit für die Umwandlung während der Zeit des Compilierens unter Verwendung der Mittel, welche die Template-Metaprogrammierung bereitstellen, ist folgende:

    #include <iostream>
    using namespace std;
    
    template <unsigned long n>
    struct dec2bin {
      static unsigned const value =
        dec2bin<n/10>::value << 1 | n%10;
    };
    
    template <>
    struct dec2bin<0> {
      static unsigned const value = 0;
    };
    
    int main()
    {
      cout << "L00L=" << dec2bin<1001>::value << endl;
    }
    

    Grüße
    Martin



  • wir haben eine "globale" methode für sowas (ähnlich dem beitrag 2-3 weiter oben):

    //returns bitmask as string e.g. 0001 0100 1101
    template<typename T> 
    inline std::string getBitString(const T& value)
    {
       stringstream text;
       for(int i=sizeof(value)*8-1/*8 bits per byte*/; i>=0; i--)
       {
          text<<(char) ( ((value>>i) & 1) + '0');
          if(i%4 == 0 && i>0) text<<' ';
       }
       return text.str();
    }
    


  • int a = 124;

    int bits = 8 * sizeof(a);

    for(int j = bits -1; j >= 0; --j) {
    if(a & (1 << j))
    cout << "1";
    else cout << "0";
    }

    eben ausprobiert, warum kann man nicht schreiben

    if(a | (0 << j))

    oder gibt doch nur das ein-bit zurück wenn operand1 ODER operand2 eine 1 liefert.

    bei folgenden bitmuster (8 bit) kann der doch nicht lauter einsen zurück geben, aber bei mir macht der das. ??

    000001011 - dezimal 11, mit ODER verknüpft -> a | (0 << j)
    000000000
    000001011

    es gibt aber NUR EINSER zurück, warum?



  • pussycatdoll schrieb:

    if(a | (0 << j))

    Das (0 << j) ist immer 0. Und irgendwas | 0 gibt immer irgendwas. Und wenn irgendwas nicht 0 ist, dann ist es wahr.



  • danke, aber a ist nicht irgendwas sondern im bsp. ja 0.
    wie man im bitmuster ja sehen kann.
    | bitverknüpfung laut wahrheitstabelle bei
    0 | 0 = 0
    0 | 1 = 1
    1 | 0 = 1
    1 | 1 = 1

    und im bitmuster
    000001011
    oder verknüpft mit
    000000000
    ergibt also

    000001011

    im if ergäbe das doch 0 und somit FALSE, was dann zum else ging. tut es aber nicht.

    irgendwas kapier ich hier nihct.


Anmelden zum Antworten