Ws is der Unterschied?

...komplette Frage anzeigen

2 Antworten

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/_Variablen,_Konstanten_und_ihre_Datentypen#Ganzzahlen

PerfectMuffin 07.08.2016, 09:53

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

0
gchgklkgg 07.08.2016, 09:54

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

0
gchgklkgg 07.08.2016, 10:00
@PerfectMuffin

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 

0
mastema666 07.08.2016, 11:04
@gchgklkgg

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).

0
grtgrt 07.08.2016, 15:22
@gchgklkgg

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
*/

0

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.

Dereta 07.08.2016, 09:48

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

1
dannyotti 07.08.2016, 09:50
@Dereta

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

0
PerfectMuffin 07.08.2016, 09:56
@Dereta

Dafuq?

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

0x7F ist 32767, 0x80 ist -32768.

Natürlich nur bei signed.

2
PerfectMuffin 07.08.2016, 14:27
@gchgklkgg

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

0
SirNik 07.08.2016, 14:04

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

0

Was möchtest Du wissen?