Bitmuster anzeigen


  • Mod

    Nein, denn es gibt kein internes Bitmuster. Bits sind Mathematik. Du musst rechnen. Weil es zudem nicht weiter wichtig ist, gibt es dafür auch keine Funktion in der Standardbibliothek. Bibliotheken die Zahlen in bestimmten Systemen darstellen können gibt es tausende. Oder vielleicht auch nicht, weil es keiner braucht. Wie auch immer, danach zu suchen würde vermutlich länger dauern, als es sich selber zu programmieren.



  • Vielleicht meinste das:

    #include <type_traits>
    
    template<typename arT, typename iterT>
    typename std::enable_if<std::is_arithmetic<arT>::value>::type writeDual(arT number, iterT output)
    {
            for(;number;number >>= 1)
                    *output++ = (number & 1);
    }
    

    Anwendungsbeispiel:

    #include <iostream>
    #include <algorithm>
    #include <type_traits>
    
    template<typename arT, typename iterT>
    typename std::enable_if<std::is_arithmetic<arT>::value>::type writeDual(arT number, iterT output)
    {
            for(;number;number >>= 1)
                    *output++ = (number & 1);
    }
    
    int main()
    {
            std::string str;
    
            writeDual(*std::istream_iterator<int>(std::cin), std::back_inserter(str));
            std::for_each(str.begin(), str.end(), [](char &c){c += '0';});
    
            std::cout << str;
    }
    

    Ich habe keine Idee, was da der Modulo-Operator zu suchen hat.

    Edit²: Ich habe mal eine TMP-Version gebastelt, vielleicht finde ich die noch.



  • Der Modulo-Operator hat da sehr wohl etwas zu suchen. Du kannst nämlich eine Zahl in Binärdarstellung konvertieren, indem du wiederholt durch 2 teilst und die Reste notierst. Etwa:
    37 = 1 (mod 2)
    18 = 0 (mod 2)
    9 = 1 (mod 2)
    4 = 0 (mod 2)
    2 = 0 (mod 2)
    1 = 1 (mod 2)

    => 3710 = 1001012.

    Dein "& 1" im ersten Beispiel ist übrigens nichts anderes als die Restberechnung. Die ungeraden Zahlen haben in ihrer Binärdarstellung am least significant bit eben eine 1, deswegen ist x & 1 äquivalent zu x % 2.



  • gdfgdfg schrieb:

    Vielleicht std::bitset. Keine Ahnung 🤡

    Denke das passt. String via ifstream mit der Datei beladen, diesen String zum laden der bitset klasse nutzen und diese dann in einen string umwandeln und ausgeben lassen(z.B. via std::cout).



  • Vielen Dank an alle für die Antworten.

    Jetzt hab ich noch eine Frage:
    Man nehme an, der vector hat die größe 10. Dann kann ich auf die elemente 0..9 zugreifen.
    Aber warum funktioniert folgendes

    void to_binary::show()
    {
        for (size_t i = 0; i < binary.size(); i++)
        {
            std::cout << binary[i];
        }
    }
    

    aber folgendes nicht:

    void to_binary::show()
    {
        for (size_t i = binary.size()-1; i >= 0; i--)  // i > 0 funktioniert
        {
            std::cout << binary[i];
        }
    }
    

    Es kommt keine Fehlermeldung, sondern beim Ausführen des Programms ein Seg-fault.

    Danke.


  • Mod

    Wenn du von einem size_t mit Wert 0 Eins abziehst, welchen Wert bekommst du dann?



  • int main()
    {
    	int i = 345456365;
    	std::cout << std::bitset<sizeof i * CHAR_BIT>(i) << '\n';
    }
    


  • SeppJ schrieb:

    Wenn du von einem size_t mit Wert 0 Eins abziehst, welchen Wert bekommst du dann?

    std::numeric_limits<size_t>::max() ?
    (Stichwort für den TE: Zweierkomplement/Raumfolgearithmetik)

    cooky451 schrieb:

    int main()
    {
    	int i = 345456365;
    	std::cout << std::bitset<sizeof i * CHAR_BIT>(i) << '\n';
    }
    

    Das ist doch keine Kunst! 😃 🤡



  • Newsflash Sone: du warst nicht gefragt.
    Und das Wort Raumfolgearithmetik verwendet im echten Leben genau niemand.



  • Was soll denn das ueberhaupt sein? 😮



  • Kellerautomat schrieb:

    Was soll denn das ueberhaupt sein? 😮

    Ich glaube, das ergibt sich einem erst, wenn man high ist. 😃



  • Ach, Leute! Das liegt am Galileo Computing Verlag. Das Fachbuch, das mir diesen Begriff "vermittelte", kommt aus genau diesem. Jetzt hab ich meine Lektion endgültig gelernt.


Anmelden zum Antworten