in einem der ersten videos sind dieser reihe zum einstieg in die programmierung habe ich schon die vier basisdaten typen in cee vorgestellt nämlich charakter integriert und double und neben diesen vier basisdaten typen gibt es aber auch noch eine reihe weiterer datentypen die in der c sprach norm definiert sind und in diesem video werden wir uns für die bekannten datentypen aber auch für die neuen datentypen einmal den speicher bedarf und den wertebereich anschauen und schauen wie man diese datentypen verwendet übrigen jetzt zunächst einmal damit uns die ganz eiligen datentypen anzuschauen die datentypen die wir schon kennen sind aber ich hier dargestellt das ist nämlich oder korrekter und abgekürzt für inter gramm und das wesentliche was diese beiden datentypen unterscheidet ist ihre größe also die anzahl an byd die für einen datentypen reserviert werden in der c sprach norm sind nicht absolute werte für datentypen angegeben sondern nur mindestgrößen und die mindestgrößen für diese beiden datentypen sind hier dargestellt nämlich für den charakter ist das ein weit damit kann man also zahlen im werther bereich von minus 128 bis +100 27 darstellen und beim integer ist die mindestgröße die gefordert wird hier zwei bald und damit lassen sich zahlen von -32 1768 bis + 32 1767 darstellen in klammern dahinter steht eine 4 das ist nicht die mindestgröße aber das ist die größe in beit die bei typischen implementierungen von c verwendet wird für den integra also tatsächlich können also in einem interview deutlich größere zahlen dargestellt werden als die aus dem wetter bereich den ich gerade genannt hat so neben diesen beiden datentypen gibt es noch ein paar weitere zwar ist das zum einen der short integer und laut zeh sprach norm soll der bezogen auf seine größe in der mitte zwischen einem charakter und einem integer sein also sozusagen ein kleiner integer und hier ist festgelegt dass die mindestgröße zwei byd sind größer als ein integer ist ein long integer für den also eine mindestgröße von vier weit gefordert wird und wenn man noch größere zahlen speichern möchte als die die in einen long intershop passen würden dann braucht man einen long long integer für diesen datentyp sollen also mindestens acht besser wir werden diese neuen daten typen haben auch alternative bezeichnungen endlich short und long long es wird also jeweils das schlüsselwort integer hier weggelassen und genauso wie wir vorher vom datentyp charakter oder integer variablen anlegen können können wir jetzt eben auch vom typ short oder long long genauso variablen anlegen ich beginne jetzt zunächst einmal damit ein programm zu schreiben dass die größe der datentypen und deren werte bereiche ausgibt die größe eines daten typs kann man mit der funktion size of ermitteln und als argument bekommt diese funktion den datentyp dessen größe ermittelt werden soll hier also zunächst einmal der charakter die kleinsten der größte wert der mit einem charakter cannes ist in der bibliothek standard library definiert und die werte sind in konstanten definiert die charmin und charme max heißen was genau konstanten sind wie die definiert werden schauen wir uns einmal in einem späteren video an hier werden wir erst einmal diese bezeichnen einfach verwenden um die werte darzustellen genauso wie für und charakter sind auch für einen short kleinster und größter wert definiert und genauso gibt es diese definition eben auch für integer und london so in diesem programm habe ich also eine reihe von ausgaben gemacht in denen ich zunächst einmal die größe der datentypen in beit angebe und darunter dann die werte bereiche der einzelnen datentypen bei der ausgabe der wertebereich möchte ich einmal auf die formatierung zeichen der einzelnen datentypen hinweisen diese formation zeichen habe ich nochmal einmal hier in dieser tabelle auch einmal zusammengefasst es gibt also für jeden datentyp ein eigenes formatierung zeichen mit dem also die entsprechenden werte aus diesem datentypen dargestellt werden können in einen pool f und hier sehen jetzt die ausgabe und das was sie in der ausgabe steht zunächst einmal bei der größe der datentypen trifft also das was ich zuvor schon erläutert habe ein short hat also nur eine größe von 2 baut ein integer eben typischerweise vier weit und so ist es hier eben auch implementiert ein long hat ebenfalls vier byd und ein long long and a 8 bei den werten bereichen sehen wir jetzt für einen short dass der eben gerade dem wertebereich hat von -32 1768 bis 2000 1767 und integer und blog integriert haben beide den gleichen werte bereich und long long integer hat eben noch mal einen deutlich größeren wertebereich so offensichtlich gibt es also hier bei dieser implementierung in cee keinen unterschied zwischen einem integer und einem long and it's also weder bei der größe der datentypen noch bei dem werte bereich der mit dem jeweiligen datentypen dargestellt werden kann und und long and bzw in und long sind also in dieser implementierung identisch weil also die größe der daten typen die hier dargestellt sind nicht spezifiziert ist und implementierungs abhängig ist gibt es noch andere datentypen bei denen die größe fest vorgegeben ist und diesen definiert in der hölle datei standard int und diese datentypen heißen wie das hier das ins 8 unterstrich t16 unterstrich t in 32 unterstrich her und in 64 unterstrich t das ist also datentypen die jeweils 8 16 32 oder 64 bit an speicher bedarf haben und da sind wir jetzt auch noch mal hier in der ausgabe dargestellt weil also ein byte gleich 8 bit sind entspricht also die angabe der bit anzahl in dem datentypen der tatsächlichen größe allerdings in weit solche datentypen sind vor allem dann sinnvoll wenn man zum beispiel im bereich der microcontroller programmiert wo man sehr genau wissen muss eigentlich wie groß denn die datentypen die man verwendet wirklich sind in dem bereich ist nämlich speicher eine knappe ressource als das bei desktop-pcs oder laptops der fall ist nichtsdestotrotz die natürlich bei jeder programmierung dass man sich sehr genau gedanken darum machen muss wie groß ein datentyp denn wirklich sein muss der mann dann benötigt und dass er eben nicht überdimensioniert ist also viel größer als er eigentlich sein müsste so jetzt will ich einmal zeigen wie man den variablen von diesen neuen datentypen deklariert und initialisiert die datentypen heißen also wie vorher schon angekündigt short oder long long und das ist äquivalent dazu als hätte ich diese datentypen short und long and oder long long and genannt so jetzt demonstriert einmal was passiert wenn man bei einer operation mit einer variablen den zulässigen werte bereichen missachtet und dazu verwende ich hier die variable h war die also ein short integriert dazu kommentiert zunächst einmal alles das aus was ich oben nicht mehr brauche hierzu weiß ich der variablen haar war zunächst einmal den workshop max auf das ist also der größte wert den ein short variable aufnehmen kann den gebe ich dann aus und anschließend in kommentiert den wert um 1 und den neuen wert dieser variablen gebe ich dann wieder aus these wäre die ausgabe des programms also zunächst einmal bekommt er den wert 32 1767 zugewiesen und wenn wir auf diesen wert dann noch eins drauf addieren dann landen wir bei -32 1768 und die addition um 1 führt dann hier zu einem überlauf mit der konsequenz dass in der variablen h war daneben ein negativer wert steht tatsächlich also der kleinstmögliche werte den ein short wiederum aufnehmen kann dieses beispiel soll also erstmal verdeutlichen dass man als programmierer sehr genau darauf achten muss was für datentypen man auswählt und welche operationen man auf diese datentypen anwendet und man sich immer bewusst sein muss das ist überläufe geben kann die dann im programm vermutlich zu einem undefinierten verhalten führen der wehrte bereich eines datentyp es kann insgesamt natürlich nicht vergrößert werden das heißt die menge der zahlen die mit einer bestimmten anzahl von byd darstellbar sind ist nun mal begrenzt was man aber machen kann ist wenn man zum beispiel keine negativen zahlen darstellen muss dann kann man eben den wertebereich auf positive zahlen begrenzen und das mit einem sogenannten modifizieren und das schlüsselwort dieses modifiziert ist an zeit das bedeutet also dass die zahlen die man darstellen möchte kein vorzeichen haben bzw nur ein positives vorzeichen haben demgegenüber steht der modifizierung scheint mit dem man also angibt dass die zahlen vorzeichen behaftet sind also auf den negativen und positiven wertebereich verteilt sein sollen zunächst einmal gebe ich jetzt die werte bereiche der vorzeichen losen datentypen aus wenn also der datentyp kein vorteil hat dann ist selbstverständlich der kleinste darstellbare wert aus diesen wertebereich immer die null dass also die erste zahl die ich hier in dieser mengen klammer dann angeben und die konstanten die den jeweils größten wert beschreiben sind im grunde genauso wie die konstanten die wir für die vorzeichen behafteten datentypen verwendet haben nur dass hier noch jeweils ein vorgestelltes wobei vorzeichen losen datentypen ändern sich auch die formatierung zeichen für die ausgabe im print- und diese formatierung zeichen habe ich hier einmal in dieser tabelle zusammengefasst und hier sehen wir jetzt die ausgabe der werte bereiche für vorzeichen behaftete und vorzeichen lose datentypen was man hier sieht ist das bei den vorzeichen losen datentyp der wertebereich im positiven bereich eben jetzt verdoppelt wird weil eben die negativen zahlen wegfallen und damit eben auf den positiven bereich übertragen werden hans seinen datentypen werden genauso deklariert und verwendet wie alle anderen daten die wir bisher auch kennengelernt haben das jetzt einmal kurz demonstrieren möchte der jeweiligen dann typ wird also als modifiziere immer nur das schlüsselwort anzahl vorangestellt und damit erhält man dann also eine variable die nur auf den positiven wertebereich beschränkt ist dann aber im positiven wertebereich doppelt so viele werte aufnehmen kann verglichen mit einer variablen die eben sowohl im negativen als auch im positiven wertebereich werte aufnehmen kann das schlüsselwort anzeigen muss man also explizit anwenden wenn man wirklich seinen variablen datentypen auf positive werte bereiche beschränken möchte der modifiziert wird typischerweise nicht verwendet weil jede deklaration einer variablen ohne diesen modifiziere eben automatisch ein vorzeichen behafteter datentyp ist zu erschließen schauen wir uns jetzt nochmal die darstellung von gleit punktzahlen an dazu können wir ja schon die datentypen flogen double hier sind exemplarisch zwei deklaration und initialisierung dargestellt und auch für diese datentypen form uns jetzt einmal die größe des speicher bedarfs- und den werther bereich anschauen der größte und der kleinste wert für einen flotten ein double sind in der helle teil flog gespeichert und gerade bei glide punktzahlen ist noch mal interessant zu sehen wie groß eigentlich der kleinste unterschied zwischen zwei zahlen ist dennoch erkannt werden kann und hier sehen wir jetzt die aufgabe des programms ein float benötigt also vier byd ein double arbeit der werte bereich beider datentypen ist hier einmal dargestellt hier sind nur die positiven werte angegeben denn bei glatt punktzahlen wird das vorzeichen in einem separaten bit gespeichert das heißt dieser werte bereich bezieht sich also sowohl auf positive als auch negative werte und der geringste unterschied zwischen zwei zahlen vom typ flirt und dabei ist einmal hier dargestellt und daran kann man erahnen warum da beleben double heißt weil es hier eben um eine doppelte genauigkeit geht der geringste unterschied zwischen zwei double zahlen der also gemacht werden kann ist also deutlich kleiner als bei einer flut variablen bei glatt punktzahlen sind nicht so viele zusätzliche datentypen vorgesehen wie das bei denen ganz zahlen der fall war im c standard ist noch zusätzlich ein long double vorgesehen und hier sehen wir jetzt noch mal den vergleich zwischen double und long double und hier stelle fest dass bei der implementierung von zehn es keine unterschiede gibt zwischen double und long double also beide datentypen brauchen achtbar und der werte bereich weist ebenfalls keine unterschiede auf das ist bei vielen implementierungen so und das ist ein grund warum long double auch ein eher weniger gebräuchlicher datentyp ist