Frage von gchgklkgg, 59

Ws is der Unterschied?

Ich lerne gerade C++. Ich bin gerade bei int, short int, long int, long long int. Ich verstehe nicht was der Unterschied zwischen den einzelnen ist. Könnte mir das jemand erklären?

Antwort
von mastema666, 44

Das ist die maximale Länge / Größe der Werte, also Int ist zwar immer Integer (Ganzzahlen), aber je nachdem, ob es nur int, short oder long etc ist können diese Zahlen eben unterschiedlich lang sein. Diese Unterscheidung gibt es, damit man nicht unnötig viel Speicher nutzt, denn wenn man z.B. weiß, dass eine Variable nur so groß werden kann, dass short reicht, wäre es ja unnötig diese als long zu deklarieren und ihr so viel mehr Platz zu reservieren, als sie je braucht.

Welche Datentypen genau welche Länge / Größe haben können (in Bits) erfährst du z.B. hier: https://de.wikibooks.org/wiki/C%2B%2B-Programmierung/_Einf%C3%BChrung_in_C%2B%2B...

Kommentar von PerfectMuffin ,

Dazu sei angemerkt, dass die Größen nicht fest vorgeschrieben sind. Es sind nur ungefähre Angaben, an sich ist das den Compilern überlassen.

Kommentar von gchgklkgg ,

Woher weiß ich wie groß eine Variable werde kann?

Kommentar von PerfectMuffin ,

In wie fern?

Kommentar von gchgklkgg ,

denn wenn man z.B. weiß, dass eine Variable nur so groß werden kann, dass short reicht

Ich meine woher weiß ich ob mir short oder long reicht 

Kommentar von mastema666 ,

Naja, als Programmierer solltest du ja in etwa wissen "diese Variable soll nur Werte bis z.B. 1 Mio annehmen", dann brauchst du eben den kleinsten Datentyp, der diesen Wert einschließt (siehe verlinkte Übersicht).

Kommentar von grtgrt ,

Folgendes Programm nennt dir kleinste und größte Zahl der Zahlbereiche deiner C++ Installation:

// Zahlbereiche
#include
#include // Bereichsangaben
using namespace std;
int main() {


cout << "signed char umfasst die Zahlen " << endl
<< "von "
<< (int) numeric_limits::min()
<< endl
<< "bis "
<< (int) numeric_limits::max()
<< endl << endl;


cout << "short int umfasst die Zahlen " << endl
<< "von " << numeric_limits::min()
<< endl
<< "bis "
<< numeric_limits::max()
<< endl << endl;
cout << "int umfasst die Zahlen " << endl
<< "von " << numeric_limits::min()
<< endl
<< "bis "
<< numeric_limits::max()
<< endl << endl;
cout << "long int umfasst die Zahlen " << endl
<< "von "
<< numeric_limits::min() << endl
<< "bis "
<< numeric_limits::max()
<< endl << endl;
cout << "long long int umfasst die Zahlen " << endl
<< "von " << numeric_limits::min()
<< endl
<< "bis "
<< numeric_limits::max()
<< endl << endl;
}//main


/* Ausgabe wird dann wohl sein:


signed char umfasst die Zahlen
von - 128
bis 127
short int umfasst die Zahlen
von - 32768
bis 32767
int umfasst die Zahlen
von - 2147483648
bis 2147483647
long int umfasst die Zahlen
von - 2147483648
bis 2147483647
long long int umfasst die Zahlen
von - 9223372036854775808
bis 9223372036854775807
*/

Antwort
von dannyotti, 36

Bei sowas geht es um die Bitanzahl, die dieser "Variable" zugeordnet werden.

http://www2.informatik.uni-halle.de/lehre/c/c622.html

short hat 16 bit zur verfügung, das macht einen Wertebereich von

-32767 bis 32767

Wenn du mit größeren Zahlen arbeitest. brauchst du größere Datentypen.

Kommentar von Dereta ,

falsch :) der positive Bereich ist richtig.der negative jedoch nicht. Da 0 auch dazu zählt geht diese nur bis -32766 grüße

Kommentar von dannyotti ,

Stimmt, als ob diese 1 den Braten jetzt aber Fett macht:) Auswendig konnte ich sie auch nicht. Habe halt falsch kopiert^^

Kommentar von PerfectMuffin ,

Eben nicht, die Korrektur ist noch falscher.

Kommentar von PerfectMuffin ,

Dafuq?

Der Wertebereich bei 16bit geht von -32768 bis 32767.

0x7F ist 32767, 0x80 ist -32768.

Natürlich nur bei signed.

Kommentar von gchgklkgg ,

Ou Danke. Könnten Sie mir bitte erläutern wie man das rechnet? Danke

Kommentar von PerfectMuffin ,

Im Zweierkomplement hat das"least significant bit" "lsb" den Wert 1 und jedes darauf folgende Bit hat den doppelten Wert des vorherigen.

Das letzt bit(msb) hat den negativen doppelten Wert des vorletzten.

Kurz gesagt für eine Zweierkomplementzahl mit n bits ist der Wertebereich -2^(n-1) bis 2^(n-1)-1

Kommentar von SirNik ,

PerfectMuffin hat den richtigen Wertebereich :) -32768 bis 32767.

Keine passende Antwort gefunden?

Fragen Sie die Community