Char welk gegevenstype. Conversie van gegevenstypen. Drijvende-kommatypen

Gegevenstypen

Gegevenstypen zijn vooral belangrijk in C# omdat het een sterk getypeerde taal is. Dit betekent dat alle bewerkingen onderworpen zijn aan strikte typecontrole door de compiler en dat illegale bewerkingen niet worden gecompileerd. Daarom elimineert strikte typecontrole fouten en verhoogt de betrouwbaarheid van programma's. Om typecontrole af te dwingen, moeten alle variabelen, expressies en waarden van een specifiek type zijn. Er bestaat niet zoiets als een ‘typeloze’ variabele gegeven taal programmeren bestaat helemaal niet. Bovendien bepaalt het type waarde de bewerkingen die erop kunnen worden uitgevoerd. Een bewerking die legaal is voor het ene gegevenstype, is mogelijk niet geldig voor een ander gegevenstype.

Er zijn twee algemene categorieën ingebouwde gegevenstypen in C#: waarde typen En referentie typen. Ze verschillen in de inhoud van de variabele. Conceptueel gezien is het verschil tussen de twee dat een waardetype gegevens rechtstreeks opslaat, terwijl een referentietype een verwijzing naar een waarde opslaat.

Deze typen worden opgeslagen in verschillende plaatsen geheugen: waardetypen worden opgeslagen in een gebied dat bekend staat als de stapel, en referentietypen worden opgeslagen in een gebied dat de beheerde heap wordt genoemd.

Laten we eens kijken waarde typen.

Typen gehele getallen

C# definieert negen typen gehele getallen: char, byte, sbyte, kort, ushort, int, uint, lang en ulong. Maar het char-type wordt voornamelijk gebruikt om karakters weer te geven en wordt daarom apart behandeld. De overige acht typen gehele getallen zijn bedoeld voor numerieke berekeningen. Hieronder vindt u hun reeks cijfers en bitdiepte:

C# gehele typen
Type Typ CTS Beetje maat Bereik
byte Systeem.Byte 8 0:255
sbyte Systeem.SByte 8 -128:127
kort Systeem.Int16 16 -32768: 32767
kort Systeem.UInt16 16 0: 65535
int Systeem.Int32 32 -2147483648: 2147483647
uint Systeem.UInt32 32 0: 4294967295
lang Systeem.Int64 64 -9223372036854775808: 9223372036854775807
lang Systeem.UInt64 64 0: 18446744073709551615

Zoals de bovenstaande tabel laat zien, definieert C# zowel ondertekende als niet-ondertekende varianten van de verschillende typen gehele getallen. Typen gehele getallen met teken verschillen van hun niet-ondertekende tegenhangers in de manier waarop ze het meest significante deel van het gehele getal interpreteren. Als een programma dus een geheel getal met teken specificeert, genereert de C#-compiler code die het meest significante bit van het gehele getal als tekenvlag gebruikt. Een getal wordt als positief beschouwd als de tekenvlag 0 is, en negatief als deze 1 is.

Negatieve getallen worden bijna altijd weergegeven met de twee-complementmethode, waarbij alle binaire cijfers van het negatieve getal eerst worden omgekeerd en vervolgens 1 bij dat getal wordt opgeteld.

Waarschijnlijk het meest voorkomende gehele type bij het programmeren is int-type. Variabelen typ int vaak gebruikt voor lusbeheer, array-indexering en wiskundige berekeningen algemeen doel. Wanneer u een geheel getal nodig heeft met een groter bereik aan representaties dan het int-type, zijn er voor dit doel een aantal andere gehele getallen beschikbaar.

Dus als de waarde zonder teken moet worden opgeslagen, kunt u hiervoor selecteren uint-type, voor grote ondertekende waarden - lange soort, en voor grote niet-ondertekende waarden - type lang. Hieronder staat als voorbeeld een programma dat de afstand van de aarde tot de zon in centimeters berekent. Om zoveel op te bergen van groot belang het gebruikt een variabele van het type long:

Systeem gebruiken; met behulp van System.Collections.Generic; met behulp van System.Linq; met behulp van System.Text; naamruimte ConsoleApplication1 ( class Program ( static void Main(string args) ( lang resultaat; const long km = 149800000; // afstand in km. resultaat = km * 1000 * 100; Console.WriteLine(resultaat); Console.ReadLine(); ) ) )

Alle gehele getallen variabele waarden kan worden toegewezen in decimalen of hexadecimaal systeem notatie. In het laatste geval is een voorvoegsel 0x vereist:

Lange x = 0x12ab;

Als er enige onzekerheid bestaat over de vraag of een geheel getal van het type int, uint, long of ulong is, dan standaard int wordt geaccepteerd. Om expliciet aan te geven welk ander geheel getal een waarde moet hebben, kunnen de volgende tekens aan een getal worden toegevoegd:

Uint ui = 1234U; lange l = 1234L; ulong ul = 1234UL;

U en L kunnen ook worden opgegeven in kleine letters, hoewel de kleine letter L visueel gemakkelijk kan worden verward met het cijfer 1 (één).

Drijvende-kommatypen

Met typen met drijvende komma kunt u getallen weergeven fractioneel deel. Er zijn twee soorten drijvende-kommagegevenstypen in C#: vlot En dubbele. Ze vertegenwoordigen numerieke waarden met respectievelijk enkele en dubbele precisie. De breedte van het float-type is dus 32 bits, wat ongeveer overeenkomt met het weergavebereik van getallen van 5E-45 tot 3,4E+38. En de breedte van het dubbele type is 64 bits, wat ongeveer overeenkomt met het weergavebereik van getallen van 5E-324 tot 1,7E+308.

Het gegevenstype float is bedoeld voor kleinere drijvende-kommawaarden die minder precisie vereisen. Het dubbele gegevenstype is groter dan float en biedt meer hoge graad nauwkeurigheid (15 bits).

Als een niet-gehele waarde hardgecodeerd is brontekst(bijvoorbeeld 12.3), dan gaat de compiler er gewoonlijk van uit dat een waarde van het type double bedoeld is. Als de waarde moet worden opgegeven als een float, moet u er het F-teken (of f) aan toevoegen:

Vlotter f = 12,3F;

Decimaal gegevenstype

Om getallen met drijvende komma weer te geven hoge precisie decimaal type ook beschikbaar decimale, dat bedoeld is voor gebruik bij financiële berekeningen. Dit type heeft 128 bits voor representatie numerieke waarden variërend van 1E-28 tot 7,9E+28. U bent zich er waarschijnlijk van bewust dat reguliere berekeningen met drijvende komma gevoelig zijn voor decimale afrondingsfouten. Deze fouten worden geëlimineerd door het decimale type te gebruiken, waarmee u getallen tot 28 (en soms 29) decimalen kunt weergeven. Omdat dit datatype decimale waarden kan weergeven zonder afrondingsfouten, is het vooral handig voor financieel gerelateerde berekeningen:

Systeem gebruiken; met behulp van System.Collections.Generic; met behulp van System.Linq; met behulp van System.Text; naamruimte ConsoleApplication1 ( class Program ( static void Main(string args) ( // *** Berekening van de kosten van een investering met *** // *** vast rendement*** decimaal geld, procent; int i; const byte jaren = 15; geld = 1000,0 miljoen; procent = 0,045 miljoen;

Het resultaat van dit programma zal zijn:

Symbolen

In C# worden tekens niet weergegeven in 8-bits code, zoals in veel andere programmeertalen zoals C++, maar in 16-bits code, genaamd Unicode. De tekenset van Unicode is zo breed dat deze vrijwel alle tekens omvat natuurlijke talen in de wereld. Hoewel veel natuurlijke talen, waaronder Engels, Frans en Duits, relatief kleine alfabetten hebben, gebruiken sommige andere talen, zoals het Chinees, vrij grote tekensets die niet kunnen worden weergegeven door een 8-bits code. Om deze beperking te omzeilen, definieert C# typ char, wat niet-ondertekende 16-bits waarden vertegenwoordigt, variërend van 0 tot 65.535. De standaard 8-bits ASCII-tekenset is echter een subset van Unicode, variërend van 0 tot 127. Daarom zijn ASCII-tekens nog steeds geldig in C#.

  Een datatype is een beschrijving van het waardenbereik dat een variabele van een bepaald type kan aannemen. Elk gegevenstype wordt gekenmerkt door:
   1. aantal bezette bytes (grootte)
   2. het bereik van waarden dat de variabele kan aannemen van dit type.

Alle gegevenstypen kunnen worden onderverdeeld in de volgende typen:
   1. eenvoudige (scalaire) en complexe (vector) typen;
   2. basis (systeem) en gebruiker (gedefinieerd door de gebruiker).
  In de SI-taal wordt het systeem van basistypen gevormd door vier gegevenstypen:
   1. symbolisch,
   2. geheel getal,
   3. enkele echte precisie,
   4. dubbele precisie echt.

Gedetailleerde beschrijving van gegevenstypen in SI-taal

type Karaktertype Type geheel getal Echt type met enkele precisie Echt type met dubbele precisie
beschrijving verkoold int vlot dubbele
maat 1 byte (8 bits) 4 bytes (32 bits) 4 bytes (32 bits)
23 bits – mantisse;
8 bits – bestelling;
1 bit – teken.
8 bytes (64 bits)
52 bits – mantisse;
11 bits – bestelling;
1 bit – teken.
bereik van waarden -128 ... 127 2147483648 ... 2147483647 ±3,4E±38
Nauwkeurigheid tot 7 decimalen
±1,7E±308
Nauwkeurigheid tot 17 decimalen

De SI-taal biedt twee soorten gegevenstypemodificatoren:
   1. tekenmodificatoren: ondertekend en niet-ondertekend.
   2. maataanpassingen: kort en lang.
  Typeaanpassers worden in meer detail beschreven in de tabel:

Complexe getallen in SI

  Complexe getallen werden geïntroduceerd in de C99-standaard.
   float_Complex
   dubbel_Complex
   lang dubbel_Complex
  Al dit geluk is om in de bibliotheek te zijn complex.h :)

Minimaal en maximale waarden alle basisgegevenstypen van de SI-taal worden beschreven in de bibliotheken: limit.h – bevat bereiken van gehele waarden, float.h – bevat bereiken van reële waarden.

Booleaans gegevenstype in SI

  Standaard C89:

   Booleaans type – int
    0 – onwaar;
    niet 0 – waar. Dat wil zeggen dat er geen logisch type als zodanig is gemaakt, maar dat in plaats daarvan int wordt gebruikt.
  Standaard C99:
   Booleaans type - _Bool
  Trefwoorden: bool waar onwaar
En dit is geluk in de bibliotheek stdbool.h

Operatoren voor aangifte

  Variabel – genoemd geheugengebied computer, ontworpen om waarden van een bepaald type op te slaan, met een willekeurige toegangsmethode: lezen en schrijven. Variabelenaam is een geldige SI-taalidentificatie die niet eerder werd gebruikt om andere variabelen, typen, opsommingsleden of functienamen aan te duiden. De operator voor variabele declaratie heeft de volgende syntaxis: type naam1[,naam2[,...]]; Voorbeelden:
  int a, b, c;
  dubbele x, y;
  teken ch;
  Er zijn enkele onuitgesproken regels, dat wil zeggen: uitvoering in goede vorm, maar het is niet nodig om dit te doen:
   1. elke declaratie van variabelen van een nieuw type begint op een nieuwe regel;
   2. uit de naam van de variabele moet duidelijk blijken waarom deze is en wat erin zal worden opgeslagen (hoewel soms door zulke informatieve namen de snelheid van het schrijven van code afneemt, omdat sommige mensen in de war raken en variabelen hele zinnen noemen);
   3. Daarom verschijnt de regel: de naam van de variabele mag niet te lang zijn;
   4. na het declareren van een variabele is het zeer raadzaam om in de opmerkingen aan te geven waarvoor deze dient;
   5. Het is noodzakelijk om namen van variabelen te scheiden met spaties.
  De operator voor variabele declaratie met initialisatie heeft de volgende syntaxis: type naam1[=waarde1][, naam2[=waarde2][,...]]; Voorbeelden:
  int a=26, b=032, c=0x1A;
  dubbel x=2,5e2,y=0x1.ffe-3;
  char ch=’Z’;

Constanten in SI

  Er zijn drie soorten constanten in de SI-taal:
   1. gehele getallen,
   2. echt,
   3. symbolisch.
  Gehele constanten
   1. De decimale constante wordt aangegeven decimale in de gebruikelijke vorm.
   2. Een octale constante wordt aangegeven door een getal dat begint met het cijfer nul en de cijfers 0...7 bevat.
   3. Een hexadecimale constante wordt aangegeven door een geheel getal met een voorvoegsel 0x of 0X, dat de cijfers 0...9 en de letters van het Latijnse alfabet a...f, A...F bevat.
  Echte constanten worden geschreven in decimale of hexadecimale notaties. De positie van de komma wordt aangegeven met een punt, de exponent wordt aangegeven na de Latijnse letter e (of E). Karakterconstanten voorafgegaan door een \-teken, dit is het zogenaamde "ontsnappen". Er zijn speciale tekens in SI:
   ‘\’’ – enkele aanhalingstekens,
   ‘\”’ – dubbele aanhalingstekens,
   ‘\\’ – backslash,
   ‘\?’ – vraagteken,
   ‘\a’ – geluidssignaal,
   ‘\b’ – een teken verwijderen,
   ‘\f’ – pagina scrollen,
   ‘\n’ – regelinvoer,
   ‘\r’ – regelterugkeer naar het begin van de regel,
   ‘\t’ – horizontaal tabblad,
   ‘\v’ – verticaal tabblad.

In SI kunt u ook variabelen maken die een constante waarde hebben (hun waarde kan niet worden gewijzigd). De declaratie van dergelijke “variabelen” heeft de volgende syntaxis: const type naam1=waarde1[,naam2=waarde2[,...]]; Voorbeelden:
   const niet-ondertekend int x=80, y=25;
   const dubbel pi=3,1415;

Operator voor het maken van gegevenstypen in SI

  De operator typedef wordt gebruikt om te creëren aangepaste typen data, de syntaxis voor het gebruik ervan: typedef oude_type_naam nieuwe_type_naam; Voorbeeld:
   typedef niet-ondertekend int woord;
  In SI kan typedefinitie volgens de standaard vrijwel overal in het programma worden uitgevoerd (dat wil zeggen dat er geen strikt gedefinieerd blok is voor het definiëren van gegevenstypen). , retourneert het het aantal bytes dat in het geheugen is ingenomen. Voorbeeld:
   sizeof(int) //return 4
   sizeof(char) //resultaat 1
   sizeof(dubbel) // retourneert 8

In deze les leer je het C++ taalalfabet, en ook wat gegevenstypen het programma kan het verwerken. Dit is misschien niet het meest opwindende moment, maar deze kennis is noodzakelijk! Bovendien, als je een andere programmeertaal gaat leren, zul je met meer zelfvertrouwen een soortgelijke leerfase doormaken. Een C++-programma kan de volgende symbolen bevatten:

  • hoofdletter, kleine letter Latijnse letters A, B, C…, x, y, z en onderstrepingsteken;
  • Arabische cijfers van 0 tot 9;
  • speciale tekens: ( ) , | , () + - / % * . \‘: ?< > = ! & # ~ ; ^
  • spatie-, tab- en escape-tekens nieuwe lijn.

Bij het testen van programma's kunt u gebruik maken van opmerkingen. Als de tekst twee slash-tekens // bevat en eindigt met een nieuweregelteken of tussen de tekens /* en */ staat, negeert de compiler dit.

Gegevens in C++

Om een ​​probleem op te lossen, verwerkt elk programma bepaalde gegevens. Dat kan zo zijn verschillende soorten: gehele getallen en reële getallen, tekens, strings, arrays. In C++ worden gegevens meestal aan het begin van de functie beschreven. NAAR basisgegevenstypen talen zijn onder meer:

Om andere soorten gegevens te genereren, eenvoudig en zogenaamd specificeerders. C++ definieert vier gegevenstypespecificaties:

  • kort - kort;
  • lang - lang;
  • ondertekend - ondertekend;
  • niet ondertekend - niet ondertekend.

Type geheel getal

Typ variabele int in het computergeheugen kan 2 of 4 bytes in beslag nemen. Het hangt af van de bitgrootte van de processor. Standaard worden alle typen gehele getallen als ondertekend beschouwd, dat wil zeggen als de specificatie ondertekend mag niet gespecificeerd worden. Specificator niet ondertekend staat toe dat u alleen vertegenwoordigt positieve cijfers. Hieronder vindt u enkele bereiken van waarden van het gehele type

Type Bereik Maat
int -2147483648…2147483647 4 bytes
niet ondertekend int 0…4294967295 4 bytes
ondertekend int -2147483648…2147483647 4 bytes
korte int -32768…32767 2 bytes
lang int -2147483648…2147483647 4 bytes
niet-ondertekende korte int 0…65535 2 bytes

Echt type

Een getal met drijvende komma wordt weergegeven in de vorm mE +- p, waarbij m de mantisse is (geheel getal of fractioneel getal Met decimaal punt), p - orde (geheel getal). Typisch waarden zoals vlot neemt 4 bytes in beslag, en dubbele 8 bytes. Tabel met reële waardebereiken:

vlot 3,4E-38…3,4E+38 4 bytes
dubbele 1.7E-308…1.7E+308 8 bytes
lange dubbele 3.4E-4932…3.4E+4932 8 bytes

Booleaans type

Typ variabele bool kan slechts twee waarden aannemen WAAR ( WAAR ) of makkelijk ( leugen ). Enige betekenis, niet gelijk aan nul, wordt geïnterpreteerd als WAAR. Betekenis vals in het geheugen weergegeven als 0.

typ leegte

De waardenset van dit type is leeg. Het wordt gebruikt om functies te definiëren die geen waarde retourneren, om aan te geven lege lijst functieargumenten, als het basistype voor pointers en bij typecast-bewerkingen.

Conversie van gegevenstypen

In C++ zijn er twee soorten gegevenstypeconversie: expliciet en impliciet.

  • Impliciete conversie gebeurt automatisch. Dit gebeurt tijdens het vergelijken, toewijzen of evalueren van uitdrukkingen van verschillende typen. Bijvoorbeeld, volgende programma zal een waarde van het type naar de console afdrukken vlot

#include "stdafx.h" #include naamruimte std gebruiken; int main() ( int i=5; float f=10.12; cout<>ongeldig"); retourneert 0; )

#include "stdafx.h"

#erbij betrekken

naamruimte std gebruiken;

int hoofd()

int ik = 5; vlotter f = 10,12;

uit<< i / f ;

systeem ("pauze>>void" );

retour 0;

De hoogste prioriteit wordt gegeven aan het type waarbij de minste hoeveelheid informatie verloren gaat. U mag geen misbruik maken van impliciete typeconversie, aangezien zich verschillende onvoorziene situaties kunnen voordoen.

  • Expliciete conversie in tegenstelling tot impliciet wordt het uitgevoerd door de programmeur. Er zijn verschillende manieren om deze conversie uit te voeren:
  1. Converteren naar stijlen C: (zweven) een
  2. Converteren naar stijlen C++: vlot()

Typecasting kan ook worden uitgevoerd met behulp van de volgende bewerkingen:

statische_cast<>() const_cast<>() herinterpreteer_cast<>() dynamische_cast<> ()

statische_cast<> ()

const_cast<> ()

herinterpreteer_cast<> ()

dynamische_cast<> ()

statisch_cas- converteert gerelateerde gegevenstypen. Deze operator cast typen volgens de gebruikelijke regels, wat nodig kan zijn als de compiler geen automatische conversie uitvoert. De syntaxis ziet er als volgt uit:

Typ static_cast<Тип>(voorwerp);

Met static_cast kunt u de constantheid van een variabele niet verwijderen, maar de volgende operator kan dit wel doen. const_cast- wordt alleen gebruikt als het nodig is om de constantheid van een object te verwijderen. De syntaxis ziet er als volgt uit:

Typeconst_cast< Type> (voorwerp);

herinterpreteer_cast- gebruikt voor conversie verschillende soorten, gehele getallen naar een pointer en omgekeerd. Als u een nieuw woord "index" ziet, hoeft u zich geen zorgen te maken! Dit is ook een gegevenstype, maar we zullen er niet snel mee werken. De syntaxis is hier dezelfde als die van de eerder besproken operators:

Typeherinterpreteren_vorm< Type> (voorwerp);

dynamische_cast- gebruikt voor dynamische conversie typen, implementeert het casten van pointers of referenties. Syntaxis:

Typedynamisch _vorm< Type> (voorwerp);

Controlekarakters

U bent al bekend met enkele van deze “controlekarakters” (bijvoorbeeld met \N). Ze beginnen allemaal met een backslash en worden ook omgeven door dubbele aanhalingstekens.

Afbeelding

Hex-code

Naam

Pieper geluid

Ga een stap terug

Vertaling van pagina (formaat)

Lijnvoeding

Vervoer terug

Horizontale tabellering

Verticaal tabblad

Laatste update: 17-09-2017

Elke variabele heeft bepaald type. En dit type bepaalt welke waarden een variabele kan hebben, welke bewerkingen erop kunnen worden uitgevoerd en hoeveel bytes het geheugen in beslag zal nemen. De C++-taal definieert het volgende: basistypen gegevens:

    bool: Booleaans type. Kan er één van twee meenemen echte waarden(waar) en onwaar (onwaar). De geheugenvoetafdruk voor dit type is niet precies gedefinieerd.

    char: vertegenwoordigt één teken in ASCII-codering. Neemt 1 byte (8 bits) in beslag in het geheugen. Kan elke waarde opslaan van -128 tot 127, of van 0 tot 255

    ondertekende char: vertegenwoordigt een enkel teken. Neemt 1 byte (8 bits) in beslag in het geheugen. Kan elke waarde van -128 tot 127 opslaan

    niet-ondertekende char: vertegenwoordigt één teken. Neemt 1 byte (8 bits) in beslag in het geheugen. Kan elke waarde van 0 tot 255 opslaan

    wchar_t : vertegenwoordigt een breed karakter. Op Windows neemt het 2 bytes (16 bits) geheugen in beslag, op Linux 4 bytes (32 bits). Kan elke waarde opslaan in het bereik van 0 tot 65.535 (voor 2 bytes), of van 0 tot 4.294.967.295 (voor 4 bytes)

    char16_t: vertegenwoordigt een enkel Unicode-teken. Neemt 2 bytes (16 bits) in beslag in het geheugen. Kan elke waarde van 0 tot 65.535 opslaan

    char32_t: Vertegenwoordigt een enkel Unicode-teken. Neemt 4 bytes (32 bits) in beslag in het geheugen. Kan elke waarde van 0 tot 4.294.967.295 opslaan

    kort: vertegenwoordigt een geheel getal in het bereik –32768 tot 32767. Neemt 2 bytes (16 bits) geheugen in beslag.

    Dit type heeft ook synoniemen korte int, ondertekende korte int, ondertekende korte.

    unsigned short: vertegenwoordigt een geheel getal in het bereik van 0 tot 65535. Neemt 2 bytes (16 bits) geheugen in beslag.

    Dit type heeft ook een synoniem unsigned short int.

    int: vertegenwoordigt een geheel getal. Afhankelijk van de processorarchitectuur kan deze 2 bytes (16 bits) of 4 bytes (32 bits) in beslag nemen. Het bereik van de grenswaarden kan dienovereenkomstig ook variëren van –32768 tot 32767 (met 2 bytes) of van −2.147.483.648 tot 2.147.483.647 (met 4 bytes). Maar in ieder geval moet de maat groter zijn dan of gelijk zijn aan de maat van het korte type en kleiner dan of gelijk aan de maat van het lange type

    Dit type heeft synoniemen ondertekend int en ondertekend.

    unsigned int : vertegenwoordigt een positief geheel getal. Afhankelijk van de processorarchitectuur kan deze 2 bytes (16 bits) of 4 bytes (32 bits) in beslag nemen, en daarom kan het bereik van de grenswaarden variëren: van 0 tot 65535 (voor 2 bytes), of van 0 tot 4.294.967.295 (voor 4 bytes).

    unsigned kan als synoniem voor dit type worden gebruikt

    lang: vertegenwoordigt een geheel getal in het bereik −2.147.483.648 tot 2.147.483.647. Neemt 4 bytes (32 bits) geheugen in beslag.

    Dit type heeft ook synoniemen long int , Signed Long Int en Signed Long

    lang zonder teken: vertegenwoordigt een geheel getal in het bereik van 0 tot 4.294.967.295. Neemt 4 bytes (32 bits) geheugen in beslag.

    Heeft het synoniem een ​​lange int zonder handtekening.

    lang lang : vertegenwoordigt een geheel getal in het bereik van −9.223.372.036.854.775.808 tot +9.223.372.036.854.775.807. Neemt doorgaans 8 bytes (64 bits) geheugen in beslag.

    Heeft synoniemen lang lang int, ondertekend lang lang int en ondertekend lang lang.

    niet-ondertekend lang lang: vertegenwoordigt een geheel getal in het bereik van 0 tot 18.446.744.073.709.551.615. Normaal gesproken 8 bytes (64 bits) in het geheugen.

    Heeft het synoniem niet-ondertekend long long int .

    vlotter: vertegenwoordigt echt nummer gewone precisie drijvende komma in het bereik +/- 3,4E-38 tot 3,4E+38. Neemt 4 bytes (32 bits) in beslag in het geheugen

    dubbel: vertegenwoordigt een reëel getal met drijvende komma met dubbele precisie in het bereik +/- 1,7E-308 tot 1,7E+308. Neemt 8 bytes (64 bits) geheugen in beslag

    lang dubbel: vertegenwoordigt een reëel getal met drijvende komma met dubbele precisie van minimaal 8 bytes (64 bits). Afhankelijk van de grootte van het gebruikte geheugen kan het bereik van geldige waarden variëren.

    void : typ zonder waarde

Alle gegevenstypen behalve void kunnen dus in drie groepen worden verdeeld: karakter (char, wchar_t, char16_t, char32_t), integer (short, int, long, long long) en drijvende-kommagetaltypen (float, double, long double).

Karaktertypen

De typen die worden gebruikt om tekens in de toepassing weer te geven zijn char, wchar_t, char16_t en char32_t.

Laten we verschillende variabelen definiëren:

Char c = "d"; wchar_t d = "c";

Variabel typ char neemt één teken als waarde enkele aanhalingstekens: char c = "d" . U kunt ook een nummer toewijzen uit het bereik dat hierboven in de lijst is opgegeven: char c = 120 . In dit geval is de waarde van variabele c het teken met code 120 in de ASCII-tekentabel.

Het is de moeite waard om te overwegen dat om wchar_t-tekens naar de console uit te voeren, je niet std::cout moet gebruiken, maar de std::wcout-stream:

#erbij betrekken int main() ( char a = "H"; wchar_t b = "e"; std::wcout<< a << b << "\n"; return 0; }

In dit geval kan de std::wcout-stream werken met zowel char als wchar_t. En de std::cout-stream voor de wchar_t variabele zal zijn numerieke code uitvoeren in plaats van een teken.

De C++11-standaard heeft de typen char16_t en char32_t toegevoegd, die gericht zijn op het gebruik van Unicode. Threads voor het werken met deze typen zijn echter nog niet geïmplementeerd op besturingssysteemniveau. Als u daarom de waarden van variabelen van dit type op de console wilt weergeven, moet u de variabelen converteren naar het type char of wchar_t:

#erbij betrekken int main() ( char a = "H"; wchar_t b = "e"; char16_t c = "l"; char32_t d = "o"; std::cout<< a << (char)b << (char)c << (char)d << "\n"; return 0; }

In dit geval worden de variabelen bij het uitvoeren voorafgegaan door een cast-bewerking naar het char-type - (char) , waardoor de waarden van de variabelen b, c en d worden geconverteerd naar het char-type en kunnen worden uitgevoerd naar de console met behulp van de std::cout-stream.

Typen gehele getallen

Typen gehele getallen worden weergegeven door de volgende typen: short, unsigned short, int, unsigned int, long, unsigned long, long long en unsigned long long:

Kort a = -10; ongetekende korte b= 10; int c = -30; niet-ondertekende int d = 60; lange e = -170; niet-ondertekende lange f = 45; lang lang g = 89;

Soorten drijvende-kommagetallen

Drijvende-komma- en breukgetaltypen worden weergegeven door float, double en long double:

Zweven a = -10,45; dubbele b = 0,00105; lange dubbele c = 30,890045;

Grootte van gegevenstype

In de bovenstaande lijst wordt voor elk type weergegeven hoeveel ruimte het in het geheugen in beslag neemt. Het is echter vermeldenswaard dat compilerontwikkelaars de groottelimieten voor typen onafhankelijk kunnen kiezen, op basis van de hardwaremogelijkheden van de computer. De standaard stelt alleen de minimumwaarden vast die zouden moeten zijn. Voor de typen int en short is de minimumwaarde bijvoorbeeld 16 bits, voor het lange type 32 bits, voor het lange dubbele type. In dit geval mag de grootte van het lange type niet kleiner zijn dan de grootte van het int-type, en de grootte van het int-type mag niet kleiner zijn dan de grootte van het korte type, en de grootte van het lange dubbele type moet groter zijn dan het dubbele. De g++-compiler voor Windows gebruikt bijvoorbeeld 12 bytes voor lange doubles, en de compiler die in Visual Studio is ingebouwd en ook onder Windows draait, gebruikt 8 bytes voor lange doubles. Dat wil zeggen dat zelfs binnen hetzelfde platform verschillende compilers verschillende benaderingen kunnen hebben met betrekking tot de grootte van bepaalde gegevenstypen. Maar over het algemeen worden de maten gebruikt die hierboven zijn aangegeven bij het beschrijven van gegevenstypen.

Er zijn echter situaties waarin het nodig is om precies de maat van een bepaald type te weten. En hiervoor heeft C++ de operator sizeof(), die de grootte van het geheugen retourneert in bytes die de variabele in beslag neemt:

#erbij betrekken int main() ( lang dubbel getal = 2; std::cout<< "sizeof(number) =" << sizeof(number); return 0; }

Console-uitvoer bij compileren in g++:

groottevan(getal) = 12

Tegelijkertijd is het bij het definiëren van variabelen belangrijk om te begrijpen dat de waarde van een variabele niet verder mag gaan dan de grenzen die voor zijn type zijn aangegeven. Bijvoorbeeld:

Niet-ondertekend kort nummer = -65535;

De G++-compiler zal bij het compileren van een programma met deze regel een foutmelding genereren waarin staat dat de waarde -65535 niet binnen het bereik van geldige waarden voor het niet-ondertekende korte type valt en zal worden afgekapt.

In Visual Studio kan de compilatie zonder fouten doorgaan, maar de variabele number krijgt de waarde 2 - het resultaat van het converteren van het getal -65535 naar een niet-ondertekend kort type. Dat wil zeggen, nogmaals, het resultaat zal niet precies zijn wat verwacht werd. De waarde van een variabele is slechts een verzameling bits in het geheugen die volgens een specifiek type worden geïnterpreteerd. En voor verschillende typen kan dezelfde set bits anders worden geïnterpreteerd. Daarom is het belangrijk om rekening te houden met de waardebereiken voor een bepaald type wanneer u een waarde aan een variabele toekent.

automatische specificatie

Soms kan het moeilijk zijn om het type expressie te bepalen. En volgens de nieuwste standaarden kun je de compiler het type object zelf laten afleiden. En hiervoor wordt de autospecificatie gebruikt. Als we bovendien een variabele definiëren met de automatische specificatie, moet deze variabele met een bepaalde waarde worden geïnitialiseerd:

Automatisch nummer = 5;

Op basis van de toegewezen waarde zal de compiler het type variabele afleiden. Niet-geïnitialiseerde variabelen met de automatische specificatie zijn niet toegestaan.