Der C++ Programmierer: Aufgabe 1.2



  • Hallo,

    ich verstehe die Aufgabe 1.2 nicht ganz. Soll ich weiter machen oder das Kapitel nochmal neu anfangen bis ich das verstehe?? Ist das sehr wichtig oder kann ich das auslassen für eine Weile?

    Aufgabe: Schreiben Sie ein Programm, das die größtmögliche unsigned int-Zahl (int, long,unsigned long) ausgibt, ohne dass die Kenntnis der systemintern verwendeten Bitzahl für jeden Datentyp benutzt wird. Hinweise: Studieren Sie die möglichen Operatoren für ganze Zahlen. Der ~- Operator invertiert alle Bits. macht aösp aus einer 0 die maximal größte unsigned-Zahl. Sie ist die größte Zahl, weil alle Bits gesetzt sind. Bei signed-Zahlen wird ein Bit für das Vorzeichen gebraucht. (Zweierkomplement-Darstellung).<

    Ich weiß auch wirklich nicht wie ich anfangen soll.



  • Hast du dir den ~(Bitweise NICHT) Operator mal angeschaut?

    #include <iostream>
    #include <limits>
    #include <bitset>
    
    int main()
    {
    	int i = 0;
    
    	std::bitset<8> bs1(i);
    
    	std::cout << "zero: " << bs1.to_string() << "\n"; //00000000
    
    	std::bitset<8> bs2(~i);
    
    	std::cout << "max: " << bs2.to_string() << "\n"; //11111111
    
    	unsigned j = ~i;
    
    	std::bitset<8> bs3(~j);
    
    	std::cout << "zero: " << bs3.to_string() << "\n"; //00000000
    }
    


  • Eduart123 schrieb:

    Soll ich weiter machen oder das Kapitel nochmal neu anfangen bis ich das verstehe?? Ist das sehr wichtig oder kann ich das auslassen für eine Weile?

    Grundsätzlich sollte man "Bits" und logische Operatoren schon verstanden haben. Das kommt aber vielleicht nach und nach, wenn man das braucht. Es kommt drauf an, was man so macht. Ich hab damit im Alltag kaum mal was zu tun.



  • kann man durchaus immer wieder mal gebrauchen - schau dir daher zumindest die Grundlagen an und überspringe das Kapitel nicht!
    Es schadet nicht, wenn man weiß, wie Ganzzahlen unter der Haube funktionieren. Bitoperatoren sind einfach zu verstehen wenn man versteht, wie Ganzzahlen im Speicher aussehen und wie damit gerechnet wird.

    Übrigens wird bei signed int kein Bit "geopfert", stattdessen wird die Binärdarstellung einfach anders interpretiert.
    Einfaches Beispiel: bei Bytes (8bit) kann man 2^8=256 Zahlen darstellen. Ob man nun aber 0-255, 256-511 oder irgendeinen anderen Bereich darstellt, ist egal. Alle Rechenregeln werden modulo 256 durchgeführt, d.h. z.B. (-1 == 255 == 511 == -1+k*256) mod 256.

    Zu deiner Frage: einfach passenden Datentypen verwenden, 0-setzen, und dann alle Bits auf 1 setzen. Bit-weise invertieren geht mit ~.

    #include <iostream>
    
    int main()
    {
    	const unsigned int val=0;
    	const unsigned int inv=~val; // bit-weise invertieren, z.B. 0100 -> 1011
    
    	std::cout<<"max. Ganzzahl: "<<inv<<"\n";
    	return 0;
    }
    


  • #include <iostream>
    using namespace std;
    
    int main()
    {
    	unsigned int i = 0;
    	i = ~i;
    	cout << i << endl;
    }
    


  • Hi,

    ich arbeite das Buch gerade auch durch, bin allerdings schon etwas weiter 😉 . Kapitel 8 🙂 . Fällt dir jetzt nichts auf, wenn du dir das durchliest?

    Eduart123 schrieb:

    Aufgabe: Schreiben Sie ein Programm, das die größtmögliche unsigned int-Zahl (int, long,unsigned long) ausgibt...Der ~- Operator invertiert alle Bits. macht also aus einer 0 die maximal größte unsigned-Zahl. Sie ist die größte Zahl, weil alle Bits gesetzt sind.
    Ich weiß auch wirklich nicht wie ich anfangen soll.



  • Danke für eure Hilfe!
    Ich hab es nun endlich verstanden 😃 .


Log in to reply