Najdaljši podatkovni tip v c. Vrste char, short, int in long

Vrste podatkov

Podatkovni tipi so še posebej pomembni v C#, ker je to strogo tipiziran jezik. To pomeni, da so vse operacije predmet strogega preverjanja tipa s strani prevajalnika, nezakonite operacije pa se ne prevajajo. Posledično strogo preverjanje tipa odpravlja napake in povečuje zanesljivost programov. Za uveljavitev preverjanja tipa morajo biti vse spremenljivke, izrazi in vrednosti določenega tipa. Spremenljivka »brez tipa« v tem programskem jeziku sploh ne obstaja. Poleg tega vrsta vrednosti določa operacije, ki jih je mogoče izvajati na njej. Operacija, ki je zakonita za eno vrsto podatkov, morda ni veljavna za drugo.

V C# obstajata dve splošni kategoriji vgrajenih podatkovnih tipov: vrednostne vrste in referenčne vrste. Razlikujejo se po vsebini spremenljivke. Konceptualno je razlika med obema v tem, da vrednostni tip shranjuje podatke neposredno, medtem ko referenčni tip shranjuje sklic na vrednost.

Ti tipi so shranjeni na različnih lokacijah v pomnilniku: tipi vrednosti so shranjeni v območju, imenovanem sklad, referenčni tipi pa so shranjeni v območju, znanem kot upravljana kopica.

Pa si poglejmo vrednostne vrste.

Celoštevilske vrste

C# definira devet celih tipov: char, byte, sbyte, short, ushort, int, uint, long in ulong. Toda tip char se uporablja predvsem za predstavitev znakov in se zato obravnava ločeno. Preostalih osem tipov celih števil je za numerične izračune. Spodaj je njihov obseg števil in bitna globina:

Celoštevilski tipi C#
Vrsta Vrsta CTS Bitna velikost Razpon
bajt System.Byte 8 0:255
sbyte System.SByte 8 -128:127
kratek System.Int16 16 -32768: 32767
ushort System.UInt16 16 0: 65535
int System.Int32 32 -2147483648: 2147483647
uint System.UInt32 32 0: 4294967295
dolga System.Int64 64 -9223372036854775808: 9223372036854775807
ulong System.UInt64 64 0: 18446744073709551615

Kot kaže zgornja tabela, C# definira predznačene in nepredznačene različice različnih tipov celih števil. Tipi celih števil s predznakom se od svojih nepredznačenih primerkov razlikujejo po tem, kako interpretirajo najpomembnejši bit celega števila. Če torej program poda predpisano vrednost celega števila, bo prevajalnik C# ustvaril kodo, ki kot zastavico predznaka uporablja najpomembnejši bit celega števila. Število velja za pozitivno, če je zastavica znaka 0, in za negativno, če je 1.

Negativna števila so skoraj vedno predstavljena z metodo komplementa dveh, pri čemer se vse dvojiške števke negativnega števila najprej obrnejo, nato pa se temu številu doda 1.

Verjetno najpogostejši celoštevilski tip v programiranju je vrsta int. Spremenljivke tipa int se pogosto uporabljajo za nadzor zanke, indeksiranje matrike in splošne matematične izračune. Ko potrebujete celoštevilsko vrednost z večjim obsegom predstavitev kot tip int, so za ta namen na voljo številni drugi tipi celih števil.

Torej, če je treba vrednost shraniti brez znaka, potem lahko izberete zanjo tip uint, za velike predpisane vrednosti - dolga vrsta, in za velike nepredznačene vrednosti - tip ulong. Spodaj je na primer program, ki izračuna razdaljo od Zemlje do Sonca v centimetrih. Za shranjevanje tako velike vrednosti uporablja dolgo spremenljivko:

Uporaba sistema; z uporabo System.Collections.Generic; z uporabo System.Linq; z uporabo System.Text; imenski prostor ConsoleApplication1 ( class Program ( static void Main(string args) ( long result; const long km = 149800000; // razdalja v km. result = km * 1000 * 100; Console.WriteLine(result); Console.ReadLine(); ) ) )

Vsem celim spremenljivkam je mogoče dodeliti vrednosti v decimalnih ali šestnajstiških zapisih. V slednjem primeru je potrebna predpona 0x:

Dolgi x = 0x12ab;

Če obstaja kakršna koli negotovost glede tega, ali je celoštevilska vrednost vrste int, uint, long ali ulong, potem privzeto int je sprejet. Če želite eksplicitno določiti, katero drugo vrsto celega števila naj ima vrednost, lahko številu dodate naslednje znake:

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

U in L lahko pišemo tudi z malimi črkami, čeprav lahko malo črko L zlahka zamenjamo s številko 1 (ena).

Vrste plavajoče vejice

Vrste s plavajočo vejico omogočajo predstavitev števil z ulomkom. V C# obstajata dve vrsti podatkovnih tipov s plavajočo vejico: plavati in dvojno. Predstavljajo številske vrednosti z enojno oziroma dvojno natančnostjo. Tako je širina tipa float 32 bitov, kar približno ustreza obsegu predstavitve števil od 5E-45 do 3,4E+38. In širina dvojnega tipa je 64 bitov, kar približno ustreza obsegu predstavitve števil od 5E-324 do 1,7E+308.

Tip podatkov s plavajočo vejico je namenjen manjšim vrednostim s plavajočo vejico, ki zahtevajo manj natančnosti. Podatkovni tip double je večji od float in ponuja višjo stopnjo natančnosti (15 bitov).

Če je vrednost, ki ni celo število, trdo kodirana v izvorni kodi (na primer 12.3), potem prevajalnik običajno predpostavlja, da je predvidena dvojna vrednost. Če je treba vrednost podati kot plavajočo vrednost, ji boste morali dodati znak F (ali f):

Float f = 12,3F;

Decimalni podatkovni tip

Na voljo je tudi decimalni tip za predstavitev visoko natančnih števil s plavajočo vejico. decimalno, ki je namenjen uporabi pri finančnih izračunih. Ta vrsta ima širino 128 bitov za predstavitev številskih vrednosti v razponu od 1E-28 do 7,9E+28. Verjetno veste, da je običajna aritmetika s plavajočo vejico nagnjena k napakam pri zaokroževanju decimalnih mest. Te napake odpravimo z uporabo decimalnega tipa, ki omogoča, da so števila predstavljena na 28 (in včasih 29) decimalnih mest. Ker lahko ta vrsta podatkov predstavlja decimalne vrednosti brez napak pri zaokroževanju, je še posebej uporabna za izračune, povezane s financami:

Uporaba sistema; z uporabo System.Collections.Generic; z uporabo System.Linq; z uporabo System.Text; imenski prostor ConsoleApplication1 ( class Program ( static void Main(string args) ( // *** Izračun stroškov naložbe z *** // *** fiksno stopnjo donosa*** decimalni denar, odstotek; int i; const bajt let = 15; denar = 1000,0 m; odstotek = 0,045 m;

Rezultat tega programa bo:

Simboli

V C# znaki niso predstavljeni v 8-bitni kodi, kot v mnogih drugih programskih jezikih, kot je C++, temveč v 16-bitni kodi, imenovani Unicode. Nabor znakov Unicode je tako širok, da zajema znake skoraj vseh naravnih jezikov na svetu. Medtem ko imajo številni naravni jeziki, vključno z angleščino, francoščino in nemščino, relativno majhne abecede, nekateri drugi jeziki, kot je kitajščina, uporabljajo precej velike nabore znakov, ki jih ni mogoče predstaviti v 8-bitni kodi. Za premagovanje te omejitve C# definira vrsta char, ki predstavlja nepredznačene 16-bitne vrednosti v razponu od 0 do 65 535. Vendar je standardni 8-bitni nabor znakov ASCII podmnožica Unicode v razponu od 0 do 127. Zato so znaki ASCII še vedno veljavni v C#.

Ta goljufija vsebuje informacije o glavnih vrstah podatkov programskega jezika C++ in značilnostih njihove implementacije. Tudi na koncu zapisa je tabela z razponi vrednosti teh vrst.

Koncept podatkovnega tipa

Glavni namen vsakega programa je obdelava podatkov. Različne vrste podatkov se shranjujejo in obdelujejo različno. V katerem koli algoritemskem jeziku mora imeti vsaka konstanta, spremenljivka, izraz ali funkcija določen tip.

Podatkovni tip definira:

  • notranja predstavitev podatkov v računalniškem pomnilniku;
  • nabor vrednosti, ki jih lahko sprejmejo količine te vrste;
  • operacije in funkcije, ki jih je mogoče uporabiti za količine te vrste.

Na podlagi teh značilnosti programer izbere vrsto vsake količine, ki se uporablja v programu za predstavitev realnih predmetov. Zahtevana deklaracija tipa omogoča prevajalniku, da preveri veljavnost različnih programskih konstrukcij. Vrsta vrednosti določa strojna navodila, ki bodo uporabljena za obdelavo podatkov.

Vse vrste jezika C++ lahko razdelimo na osnovni in sestavljeno . Jezik C++ jih definira šest glavni podatkovni tipi za predstavitev celoštevilskih, realnih, znakovnih in logičnih vrednosti. Na podlagi teh tipov lahko programer vnese opis sestavljeno vrste. Ti vključujejo nize, oštevilčenja, funkcije, strukture, reference, kazalce, unije in razrede.

Osnovni podatkovni tipi v C++

Osnovni (standardni) podatkovni tipi se pogosto imenujejo aritmetični, ker jih je mogoče uporabiti v aritmetičnih operacijah. Za opis glavnih vrst so opredeljene naslednje:

  1. int(int);
  2. char (char);
  3. wchar_t(widechar);
  4. bool(boolean);
  5. float (resnično);
  6. dvojno (dvojna natančnost resnično).

Prve štiri vrste se imenujejo celo število ( cela ), zadnja dva - vrste s plavajočo vejico . Koda, ki jo prevajalnik ustvari za obdelavo celoštevilskih vrednosti, se razlikuje od kode za vrednosti s plavajočo vejico.

Štirje so specifikator vrste , ki pojasnjuje notranjo predstavitev in obseg vrednosti standardnih tipov:

  • kratek (kratek);
  • dolgo (dolgo);
  • podpisan (podpisan);
  • nepodpisan.

Vrsta celega števila (int)

Velikost tipa int ni definirana s standardom, temveč je odvisna od računalnika in prevajalnika. Za 16-bitni procesor sta za vrednosti te vrste dodeljena 2 bajta, za 32-bitni procesor - 4 bajte.

Kratki specifikator pred imenom tipa nakazuje prevajalniku, da je treba za število dodeliti 2 bajta, ne glede na zmogljivost procesorja. Dolgi specifikator pomeni, da bo celoštevilska vrednost zasedla 4 bajte. Tako sta na 16-bitnem računalniku enakovrednika int in short int, na 32-bitnem računalniku pa sta ekvivalenta int in long int.

Interno zastopstvo vrednosti celega tipa - celo število v binarni kodi. Pri uporabi specifikatorja s predznakom se najpomembnejši bit števila razlaga kot predznačen (0 je pozitivno število, 1 je negativno število). Specifikator brez predznaka dovoljuje, da so predstavljena samo pozitivna števila, saj se najpomembnejši bit obravnava kot del kode števila. Tako je obseg vrednosti tipa int odvisen od specifikatorjev. Območja vrednosti vrednosti celoštevilskega tipa z različnimi specifikatorji za računalnike, združljive z IBM PC, so podana v tabeli »Območja vrednosti preprostih podatkovnih tipov« na koncu vnosa.

Privzeto se vsi tipi celih števil štejejo za predznačene, kar pomeni, da je predznačeni specifikator mogoče izpustiti.

Konstantam, ki jih najdemo v programu, se dodeli ena ali druga vrsta v skladu z njihovo vrsto. Če programer iz nekega razloga ni zadovoljen s tem tipom, lahko izrecno navede zahtevani tip s priponami L, l (dolgo) in U, u (nepredznačeno). Na primer, konstanta 32L bo tipa long in bo zasedla 4 bajte. Istočasno lahko uporabite priponi L in U, na primer 0x22UL ali 05Lu.

Opomba

Tipe short int, long int, signed int in unsigned int lahko skrajšamo na short, long, signed in unsigned.

Vrsta znaka (char)

Vrednosti znakovnega tipa je dodeljeno število bajtov, ki zadostuje za sprejem katerega koli znaka iz nabora znakov za dani računalnik, kar določa ime tipa. Običajno je to 1 bajt. Tip char je lahko tako kot drugi celištevilski tipi predznačen ali nepredznačen. Podpisane vrednosti lahko shranijo vrednosti v razponu od -128 do 127. Z uporabo nepodpisanega specifikatorja so lahko vrednosti v razponu od 0 do 255. To zadostuje za shranjevanje katerega koli znaka v 256-mestnem naboru znakov ASCII. Vrednosti tipa char se uporabljajo tudi za shranjevanje celih števil, ki ne presegajo meja podanih obsegov.

Razširjeni tip znakov (wchar_t)

Vrsta wchar_t je zasnovana za delo z naborom znakov, za katere 1 bajt ni dovolj za kodiranje, na primer Unicode. Velikost te vrste je odvisna od izvedbe; praviloma ustreza vrsti kratki. Konstante nizov tipa wchar_t so zapisane s predpono L, na primer L»Gates».

Logični tip (bool)

Logične vrednosti lahko sprejmejo samo vrednosti true in false, ki sta rezervirani besedi. Notranja oblika predstavitve vrednosti false je 0 (nič). Vsaka druga vrednost se interpretira kot prava. Pri pretvorbi v celoštevilski tip ima true vrednost 1.

Vrste plavajoče vejice (float, double in long double)

Standard C++ definira tri vrste podatkov za shranjevanje realnih vrednosti: float, double in long double.

Podatkovni tipi s plavajočo vejico so v pomnilniku računalnika shranjeni drugače kot celoštevilski podatkovni tipi. Notranja predstavitev realnega števila je sestavljena iz dveh delov – mantise in eksponenta. Na računalnikih, združljivih z IBM PC, plavajoče vrednosti zasedajo 4 bajte, od katerih je ena binarna cifra dodeljena za znak mantise, 8 bitov za eksponent in 23 za mantiso. Mantisa je število, večje od 1,0, vendar manjše od 2,0. Ker je prva številka mantise vedno 1, ni shranjena.

Za dvojne vrednosti, ki zasedajo 8 bajtov, je za eksponent in mantiso dodeljenih 11 oziroma 52 bitov. Dolžina mantise določa natančnost števila, dolžina eksponenta pa njegov obseg. Kot lahko vidite iz tabele na koncu vnosa, se z enakim številom bajtov, dodeljenih za vrednosti float in long int, razponi njihovih dovoljenih vrednosti zelo razlikujejo. zaradi notranje zastopniške oblike.

Dolgi specifikator pred imenom dvojnega tipa nakazuje, da je za njegovo vrednost dodeljenih 10 bajtov.

Konstante s plavajočo vejico so privzeto dvojnega tipa. Vrsto konstante lahko eksplicitno določite s priponami F, f (float) in L, l (dolgo). Na primer, konstanta 2E+6L bo tipa long double, konstanta 1.82f pa tipa float.

Pri pisanju programov, ki so prenosljivi med platformami, ne morete sklepati o velikosti tipa int. Če ga želite pridobiti, morate uporabiti operacijo sizeof, katere rezultat je velikost tipa v bajtih. Na primer, za operacijski sistem MS-DOS bo sizeof (int) rezultat 2, za Windows 98 ali OS/2 pa bo rezultat 4.

Standard ANSI ne določa obsegov vrednosti za osnovne tipe, definirana so le razmerja med njihovimi velikostmi, na primer:

sizeof(float) ≤ slzeof(double) ≤ sizeof(long double)
sizeof(char) ≤ slzeof(short) ≤ sizeof(int) ≤ sizeof(long)

Opomba

Najmanjše in največje dovoljene vrednosti za celoštevilske vrste so odvisne od izvedbe in so podane v datoteki glave (), značilnosti realnih tipov - v datoteki (), kot tudi v predlogi razreda numeric_limits

tip void

Poleg naštetih glavne vrste jezika vključujejo prazen tip, vendar je niz vrednosti tega tipa prazen. Uporablja se za definiranje funkcij, ki ne vrnejo vrednosti, za podajanje praznega seznama funkcijskih argumentov, kot osnovni tip za kazalce in v operacijah pretvorbe tipa.

Območja vrednosti preprostih podatkovnih tipov v C++ za računalnike, združljive z IBM PC

V: Kaj pomeni izraz IBM PC združljiv računalnik?
O: IBM PC združljiv računalnik je računalnik, ki je arhitekturno blizu IBM PC, XT in AT. Računalniki, združljivi z IBM PC, so zgrajeni na mikroprocesorjih, ki so združljivi z Intel 8086 (in, kot veste, so vsi novejši procesorji Intel popolnoma nazaj združljivi z 8086). Pravzaprav so to skoraj vsi sodobni računalniki.

Uvedene so bile različne vrste celih in realnih vrst, ki se razlikujejo po obsegu in natančnosti predstavitve podatkov, da bi programerju omogočili najbolj učinkovito uporabo zmogljivosti določene opreme, saj sta hitrost izračunov in količina pomnilnika odvisna od izbira vrste. Toda program, optimiziran za eno vrsto računalnika, morda ne bo prenosljiv na druge platforme, zato se na splošno izogibajte zanašanju na posebne značilnosti tipov podatkov.

Vrsta Razpon vrednosti Velikost (bajti)
bool resnično in napačno 1
podpisani znak -128 … 127 1
nepredpisan znak 0 … 255 1
podpisana kratka medn -32 768 … 32 767 2
nepodpisano kratko notr 0 … 65 535 2
podpisano dolgo notr -2 147 483 648 … 2 147 483 647 4
nepredznačeno dolgo int 0 … 4 294 967 295 4
plavati 3,4e-38 … 3,4e+38 4
dvojno 1.7e-308 … 1.7C+308 8
dolga dvojna 3.4e-4932 … 3.4e+4932 10

Za prave tipe tabela prikazuje absolutne vrednosti najmanjše in največje vrednosti.

TO podatke se nanaša na vse informacije, predstavljene v obliki, ki vam omogoča avtomatizirano zbiranje, shranjevanje in obdelavo v računalniku (številke, simboli, biti itd.).
Podatki v programu so lahko original(nastavimo na programskem vhodu) oz obdelava rezultatov(vmesni ali vikend).
Vsi podatki - spremenljivke in konstante - pripadajo določenemu tipu.
Vsaka podatkovna vrsta ima svojo povezavo obseg vrednosti(število bajtov za eno vrednost) in veljavne operacije.

Podatkovne tipe v C/C++ delimo na osnovni in odvod.
Glavne vrste vključujejo:

  1. praznina(prazen tip),
  2. int(celoštevilski tip),
  3. plavati(resnična števila s plavajočo vejico),
  4. dvojno(realna števila s plavajočo vejico dvojne natančnosti),
  5. char(vrsta znaka),
  6. bool- logično.

Sestavljene vrste

Za ustvarjanje drugih vrst uporabe podatkov osnovni vrste + t.i specifikatorji. Kličejo se podatkovni tipi, ustvarjeni iz standardnih tipov z uporabo specifikatorjev sestavljeni podatkovni tipi. C++ definira štiri specifikatorje tipov podatkov:
  1. kratek - kratek;
  2. dolgo - dolgo;
  3. podpisan-podpisan;
  4. nepodpisan
Izpeljane vrste so:
  • nizi,
  • funkcije,
  • razredi,
  • znaki,
  • povezave,
  • strukture,
  • asociacije.

Vrsta znaka

Vrsta podatkov char vedno zasedejo 1 bajt v pomnilniku računalnika. To je posledica dejstva, da je običajno količina pomnilnika, dodeljenega za vrednost tipa znaka, tolikšna, kot je potrebno za shranjevanje katerega koli od 256 znakov tipkovnice.
Vrsta znaka je lahko z znakom oz nepodpisan.
V podpisanih količinah podpisani znak lahko shranite vrednosti v območju od -128 do 127. V skladu s tem so vrednosti spremenljivk, kot je nepredpisan znak se lahko giblje od 0 do 255.
Vrsta podatkov Razpon vrednosti Velikost
char -128...+127 1 bajt
nepredpisan znak 0...255 1 bajt
podpisani znak -128...127 1 bajt

Ko delate z znakovnimi podatki, si morate zapomniti, da če izraz vsebuje en znak, mora biti priloženo enojni narekovaji. Zaporedje znakov, to je niz, kadar se uporablja v izrazih, je v dvojnih narekovajih. Na primer: "F", "3", "Ivan", "235"

Celoštevilski tip

Vrsta podatkov int v računalniškem pomnilniku lahko zasede 2, 4 ali 8 bajtov. To je odvisno od bitne velikosti procesorja.
Privzeto velja, da so vsi celi tipi označeni, to je specifikator podpisan(znak) ne sme biti naveden.
Specifikator nepodpisan(brez predznaka) omogoča predstavitev samo pozitivnih števil.

Območja celih vrednosti

Vrsta podatkov Razpon vrednosti Velikost (bajti)
int
podpisan medn
podpisano dolgo notr
-2147483648 ... 2147483647 4
nepodpisano int
nepredznačeno dolgo int
0 ... 4294967295 4
kratka notr
podpisana kratka medn
-32768 ... 32767 2
nepodpisano kratko notr 0... 65535 2
dolgo dolgo int \(-(2^{63}-1)...(2^{63}-1)\) 8
nepodpisano dolgo
dolgo int
\(0...(2^{64}-1)\) 8

Pravi tip

Notranja predstavitev realnega števila v pomnilniku računalnika se razlikuje od predstavitve celega števila. Število s plavajočo vejico predstavlja v eksponentni obliki. $$\pm mE\pm p$$ kje m- mantisa (celo ali delno število z decimalno vejico), R- vrstni red (celo število). Če želite pretvoriti število v eksponentni obliki v običajni zapis s fiksno vejico, morate mantiso pomnožiti z deset na vrstni red. Na primer: \(-6,42E+2=-6,42*10^(2)\ )

Vrednostna območja realnih tipov

Vrsta podatkov Razpon vrednosti Velikost (bajti)
plavati 3,4E-38 ... 3,4E+38 4
dvojno 1.7E-308... 1.7E+308 8
dolga dvojna 3.4E-4932 ... 3.4E+4932 10

Dolžina mantise določa natančnost števila in dolžino vrstnega reda njegovega obsega.
Podatki s plavajočim zavzemajo 4 bajte, od katerih je 1 binarni bit dodeljen predznaku, 8 bitov eksponentu in 23 bitom mantisi. Ker je najpomembnejša številka mantise vedno 1, ni shranjena.
Podatki dvojnega tipa zasedajo 8 bajtov, imajo -11 bitov za vrstni red in -52 bitov za mantiso.
Specifikator dolgega tipa pred dvojnim imenom tipa nakazuje, da je vrednosti dodeljenih 10 bajtov.

Boolov tip

Vrsta spremenljivke bool lahko sprejme le dve vrednosti prav(res) oz lažno(laž). Vsaka vrednost, ki ni nič, se interpretira kot resnična in ko se pretvori v vrsto celega števila, postane 1. Vrednost false je v pomnilniku predstavljena kot 0.

Vrsta void

Nabor vrednosti te vrste je prazen.
Vrsta praznine se uporablja za:
  • definicije funkcij, ki ne vračajo vrednosti;
  • podati prazen seznam funkcijskih argumentov;
  • kot osnovni tip za kazalce;
  • v operaciji pretvorbe tipa.

Deklariranje spremenljivk

Spremenljivka je imenovano območje pomnilnika, ki shranjuje vrednost določene vrste.
Spremenljivka ima Ime(identifikator) in pomen.
Ime služi za dostop do pomnilniškega področja, v katerem je shranjena vrednost.
Ime(identifier) ​​​​je zbirka črk, številk in podčrtajev, ki določa ime spremenljivke, ime funkcije ali ključno besedo v programu. Jezik C/C++ je občutljiv na velike in male črke (tj. vsota in vsota bosta obravnavani kot dve različni spremenljivki).
Kje, vrsto– ključna beseda, ki določa količino pomnilnika (število bajtov), ​​dodeljenega za shranjevanje vrednosti spremenljivke (kot programskega objekta), (int – celo število, float, double – real, char – simbolno, bool – logično);
Ime– edinstven identifikator spremenljivke, ki določa simbolni naslov programskega objekta v pomnilniku računalnika;
pobudnik– začetna vrednost spremenljivke, ki morda ni vključena v opis.
Na primer: spremenljivke istega tipa lahko združite v skupine tako, da jih ločite z »,«. Opisi spremenljivk različnih tipov so ločeni z “ ; "
Glede na to, kje so deklarirane, lahko spremenljivke v jeziku C/C++ razdelimo v tri razrede:
  1. lokalno - deklarirano znotraj funkcije in na voljo samo v njej;
  2. globalno - opisano pred vsemi funkcijami in dostopno od kjerkoli v programu;
  3. formalni parametri funkcij so opisani v seznamu funkcijskih parametrov.
primer:

Oznake: C spremenljivke. char, int, unsigned, long, long long, float, double, long double, long float, lexical scoping. Deklaracija spremenljivk. Območje vidnosti. Inicializacija spremenljivk. Imena spremenljivk. Eksponentna oblika.

Spremenljivke

Spremenljivke se uporabljajo za shranjevanje vrednosti (sic!). Za spremenljivko sta značilna vrsta in ime. Začnimo z imenom. V C se lahko spremenljivka začne s podčrtajem ali črko, ne pa s številko. Spremenljivka lahko vključuje angleške znake, številke in podčrtaje. Spremenljivka se ne sme ujemati s ključnimi besedami (to so posebne besede, ki se uporabljajo kot kontrolni konstrukti, za definiranje tipov itd.)

avto dvojno int struct
odmor drugače dolga stikalo
register typedef char ekstern
vrnitev praznina Ovitek plavati
nepodpisan privzeto za podpisan
zveza narediti če sizeof
hlapljivo nadaljevati enum kratek
medtem v vrsti
Kot tudi številne druge besede, značilne za določeno različico prevajalnika, na primer daleč, blizu, majhen, ogromno, asm, asm_ itd.

Na primer, pravilni identifikatorji
a, _, _1_, Sarkasm, a_long_variable, aLongVariable, var19, defaultX, char_type
nezvest
1a, $value, a-long-value, short

C je jezik, ki razlikuje velike in male črke. Spremenljivki z imenom a in A, ali end in END ali perfectDark in PerfectDarK sta različni spremenljivki.

Vrste spremenljivk

Vrsta spremenljivke določa

  • 1) Velikost spremenljivke v bajtih (koliko bajtov pomnilnika bo računalnik dodelil za shranjevanje vrednosti)
  • 2) Predstavitev spremenljivke v pomnilniku (kako bodo biti v dodeljenem pomnilniškem območju locirani v binarni obliki).
V C je več glavnih vrst. Razdelimo jih v dve skupini – cela števila in števila s plavajočo vejico.

cela

  • char- velikost 1 bajt. Nenehno! To si je treba zapomniti.
  • kratek- velikost 2 bajta
  • int- velikost 4 bajtov
  • dolga- velikost 4 bajtov
  • dolgo dolgo- velikost 8 bajtov.
Tukaj je treba narediti opombo. Velikost spremenljivk v C ni izrecno definirana kot velikost v bajtih. Standard določa samo to

char<= short <= int <= long <= long long

Zgornje vrednosti so specifične za prevajalnik VC2012 na 32-bitnem stroju. Torej, če je vaš program odvisen od velikosti spremenljivke, si vzemite čas in ugotovite njeno velikost.

Zdaj pa določimo največje in najmanjše število, ki ga lahko shrani spremenljivka vsake vrste. Števila so lahko pozitivna ali negativna. Negativna števila uporabljajo en bit za shranjevanje predznaka. Včasih je predznak nujen (na primer hranimo bančni račun, temperaturo, koordinato itd.), včasih pa ni potreben (teža, velikost niza, starost osebe itd.). Da bi to naredil, C uporablja predznačeni in nepodpisani modifikator tipa. unsigned char - vseh 8 bitov za število, skupaj imamo nabor števil od 00000000 do 11111111 v binarni obliki, to je od 0 do 255 signed char od -128 do 128. V C so spremenljivke privzeto predpisane. Zato sta zapis char in signed char enakovredna.

Tab. 1 Velikost celih vrst v c.
Vrsta Velikost, bajti Najmanjša vrednost Največja vrednost
nepredpisan znak 1 0 255
podpisani znak
(char)
1 -128 127
unsigned short 2 0 65535
podpisano kratko
(kratek)
2 -32768 32767
nepodpisano int
(nepodpisano)
4 0 4294967296
podpisan medn
(int)
4 -2147483648 2147483647
nepodpisano dolgo 4 0 4294967296
podpisan dolg
(dolga)
4 -2147483648 2147483647
nepodpisano dolgo dolgo 8 0 18446744073709551615
podpisano dolgo dolgo
(dolgo dolgo)
8 -9223372036854775808 9223372036854775807

sizeof

V C je operator, ki vam omogoča, da dobite velikost spremenljivke v bajtih. sizeof spremenljivka ali sizeof(variabla) ali sizeof(type). To je operator, ker funkcija med izvajanjem aplikacije ne more pridobiti informacij o velikosti tipa. Napišimo majhen program za preverjanje velikosti spremenljivk.

#vključi #vključi int main() ( char c; short s; int i; long l; long long L; //Kliči sizeof kot “funkcijo” printf("sizeof(char) = %d\n", sizeof(c)); printf ("sizeof(short) = %d\n", sizeof(s)); printf("sizeof(int) = %d\n", sizeof(i)); printf("sizeof(long) = %d \ n", sizeof(l)); printf("sizeof(long long) = %d\n", sizeof(L)); //Kliči kot operater printf("sizeof(char) = %d\n", sizeof c); printf("sizeof(short) = %d\n", sizeof s); printf("sizeof(int) = %d\n", sizeof i); printf(" sizeof(dolgo dolgo) = %d\n", sizeof L); _getch(); )

(Mislim, da je jasno, da imajo lahko spremenljivke poljubno veljavno ime). Ta program bi lahko napisali preprosteje

#vključi #vključi int main() ( printf("sizeof(char) = %d\n", sizeof(char)); printf("sizeof(short) = %d\n", sizeof(short)); printf("sizeof( int) = %d\n", sizeof(int)); printf("sizeof(dolgo) = %d\n", sizeof(dolgo)); printf("sizeof(dolgo dolgo) = %d\n", sizeof(long long)); //ne morete klicati sizeof kot operatorja za ime tipa //sizeof int - napaka pri prevajanju _getch();

V C ima lahko isti tip več imen
kratko === kratko notr
dolgo === dolgo int
dolgo dolgo === dolgo dolgo int
unsigned int === nepredznačeno

Vrste plavajoče vejice

  • plavati- 4 bajte,
  • dolg plovec- 8 bajtov
  • dvojno- 8 bajtov
  • dolga dvojna- 8 bajtov.
Tukaj so tudi vrednosti za VC2012 glede na standardno velikost tipov plovcev<= long float <= double <= long double все числа с плавающей точкой - со знаком.

Spremenljivka Overflow

C ne spremlja prelivanja spremenljivke. To pomeni, da bomo z nenehnim povečevanjem vrednosti, recimo, spremenljivke tipa int, na koncu "ponastavili vrednost"

#vključi #vključi void main() ( unsigned a = 4294967295; int b = 2147483647; //Nepodpisan tip overflow printf("%u\n", a); a += 1; printf("%u", a); //Overflow podpisani tip printf("%d\n", b);

Na splošno je vedenje, ko se spremenljivka preliva, definirano samo za tip nepodpisan: Nepredznačeno celo število bo ponastavilo vrednost. Pri drugih vrstah se lahko zgodi karkoli in če morate paziti na prelivanje, to storite ročno s preverjanjem argumentov ali uporabite druge metode, odvisno od prevajalnika in arhitekture procesorja.

Oznaka tipa Postfix

Ko delate s številkami, lahko uporabite črke na koncu številke, da izrecno označite njeno vrsto, npr.

  • 11 - notranja številka
  • 10u - nepodpisano
  • 22l ali 22L - dolg
  • 3890ll ali 3890LL - dolgo dolgo (tudi lL ali Ll)
  • 80.0f ali 80.f ali 80.0F - float (v vnosu mora biti decimalna vejica)
  • 3,0 - dvojno število
Znanstveni zapis privzeto označuje tudi dvojnico. #vključi #vključi int main() ( printf("sizeof(int) = %d\n", sizeof(10)); printf("sizeof(unigned) = %d\n", sizeof(10u)); printf("sizeof( dolgo) = %d\n", sizeof(10l)); printf("sizeof(dolgo dolgo) = %d\n", sizeof(10ll)); printf("sizeof(float) = %d\n", sizeof(10.f)); printf("sizeof(double) = %d\n", sizeof(10.)); printf("sizeof(double) = %d\n", sizeof(10e2)); );

Naslednja koda pa ne bo povzročila napak, ker obstaja implicitna pretvorba tipa

Int a = 10u; dvojni g = 3.f;

Šestnajstiški in osmiški zapis

Pri delu s številkami lahko uporabljate šestnajstiško in osmiško obliko. Številke v šestnajstiškem številskem sistemu se začnejo z 0x, v osmiškem številskem sistemu pa z ničlo. V skladu s tem, če se številka začne od nič, potem ne sme vsebovati števk, višjih od 7:

#vključi #vključi void main() ( int x = 0xFF; int y = 077; printf("hex x = %x\n", x); printf("dec x = %d\n", x); printf("oct x = %o\n", x); printf("oct y = %o\n", y); printf("dec y = %d\n", y); printf("hex y = %x", y); getch();

Znanstveni zapis števil

Eksponentna oblika predstavitve števila je predstavitev števila v obliki M e ± p, kjer je M- mantisa števila, str- moč desetice. V tem primeru mora imeti mantisa pred decimalno vejico en znak različen od nič.
Na primer 1,25 === 1,25e0, 123,5 === 1,235e2, 0,0002341 === 2,341e-4 itd.
Predstavitve 3.2435e7 so enakovredne 3.2435e+7
Obstaja še en prikaz ("inženiring"), v katerem mora biti diploma večkratnik treh. Na primer 1,25 === 1,25e0, 123,5 === 123,5e0, 0,0002341 === 234,1e-6, 0,25873256 === 258,73256e-3 itd.

Deklariranje spremenljivk

V C so spremenljivke vedno deklarirane na začetku bloka (blok je odsek kode, ločen z zavitimi oklepaji)

<возвращаемый тип> <имя функции> (<тип> <аргумент>[, <тип> <аргумент>]) (deklaracija spremenljivk, vse ostalo)

Pri deklaraciji spremenljivke se zapišeta njen tip in ime.

Int a; dvojni parameter;

Deklarirate lahko več spremenljivk istega tipa, tako da imena ločite z vejico

Dolgi dolgi arg1, arg2, arg3;

Na primer

#vključi #vključi int main() ( int a = 10; int b; medtem ko (a>0)( int z = a*a; b += z; ) )

Tukaj so deklarirane spremenljivke a in b znotraj funkcije glavni, in spremenljivko z znotraj telesa zanke. Naslednja koda bo povzročila napako pri prevajanju

Int main() ( int i; i = 10; int j; )

To je zato, ker je deklaracija spremenljivke za operatorjem dodelitve. Ko deklarirate spremenljivke, jih lahko takoj inicializirate.
int i = 0;
Vendar se inicializacija pri deklaraciji spremenljivke ne šteje za ločen stavek, zato bo naslednja koda delovala

Int main() ( int i = 10; int j; )

Začetna vrednost spremenljivke

Zelo pomembno je vedeti, da spremenljivke v C niso privzeto inicializirane na nič, kot v mnogih drugih programskih jezikih. Po deklaraciji spremenljivke shrani "smeti" - naključno vrednost, ki ostane v pomnilniškem območju, ki je bilo dodeljeno spremenljivki. To je predvsem posledica optimizacije programa: če ni potrebe po inicializaciji, potem ni treba zapravljati sredstev za pisanje ničel (opomba: globalne spremenljivke so inicializirane z ničlami, zakaj je tako, preberite ta članek) .

#vključi #vključi int main() ( int i; printf("%d", i); getch(); )

Če zaženete ta program na VC, se bo med izvajanjem pojavilo opozorilo
Napaka preverjanja med izvajanjem št. 3 - Spremenljivka "i" se uporablja brez inicializacije.
Če kliknete »Nadaljuj«, bo program izpisal »smeti«. V mnogih drugih prevajalnikih ne bo nobenega opozorila, ko se program izvaja.

Obseg spremenljivke

Spremenljivke so lahko lokalne (navedene znotraj funkcije) ali globalne. Globalna spremenljivka je vidna vsem funkcijam, deklariranim v tej datoteki. Lokalna spremenljivka je omejena s svojim obsegom. Ko rečem, da je spremenljivka "vidna na nekem mestu", to pomeni, da je na tem mestu definirana in se lahko uporablja. Na primer, razmislite o programu, ki ima globalno spremenljivko

#vključi #vključi int global = 100; void foo() ( printf("foo: %d\n", globalno); ) void bar(int global) ( printf("bar: %d\n", globalno); ) int main() ( foo() ; vrstica (333);

Bo prikazano
foo: 100
vrstica: 333
Tukaj je globalna spremenljivka globalno viden vsem funkcijam. Toda argument funkcije prepiše globalno spremenljivko, tako da se pri posredovanju argumenta 333 natisne lokalna vrednost 333.
Tukaj je še en primer

#vključi #vključi int global = 100; int main() ( int global = 555; printf("%d\n", global); getch(); )

Program bo izpisal 555. Tako kot v prejšnjem primeru je lokalna spremenljivka "bolj pomembna". Spremenljivka, deklarirana v določenem obsegu, na primer ni vidna zunaj njega

#vključi #vključi int global = 100; int main() ( int x = 10; ( int y = 30; printf("%d", x); ) printf("%d", y); )

Ta primer se ne bo prevedel, ker spremenljivka l obstaja samo znotraj svojega bloka.
Tu je še en primer, ko se spremenljivke, deklarirane znotraj bloka, prekrivajo

#vključi #vključi int global = 100; int main() ( int x = 10; ( int x = 20; ( int x = 30; printf("%d\n", x); ) printf("%d\n", x); ) printf( "%d\n", x getch();

Program bo natisnil
30
20
10
Globalnim spremenljivkam se je treba izogibati. To lahko slišite zelo pogosto. Poskusimo ugotoviti, zakaj. V vaših preprostih projektih so globalne spremenljivke videti povsem običajne. Toda predstavljajte si, da imate aplikacijo, ki

  • 1) Razvilo ga je več ljudi in je sestavljeno iz več sto tisoč vrstic kode
  • 2) Deluje v več nitih

Prvič, globalno spremenljivko, če je vidna vsem, lahko spremeni kateri koli del programa. Spremenite globalno spremenljivko, jo želite zapisati, drugi del programa pa jo je že prepisal z drugo vrednostjo (pravzaprav je to cel razred težav, ki nastanejo v večnitnem okolju). Drugič, pri velikih projektih je nemogoče slediti, kdo je ustvaril globalne spremenljivke in kdaj. Zgornji primeri kažejo, kako se lahko spremenljivke med seboj prekrivajo, in enako se bo zgodilo v velikem projektu.

Zagotovo obstajajo situacije, ko globalne spremenljivke olajšajo program, vendar se te situacije ne dogajajo pogosto ali v vaših domačih nalogah, zato NE USTVARJATE GLOBALNIH SPREMENLJIVK!
Spremenljivke niso samo cela števila in plavajoče vejice. Obstaja veliko drugih vrst, ki jih bomo preučili naprej.

Zadnja posodobitev: 13.11.2017

Kot mnogi programski jeziki ima tudi C# svoj sistem podatkovnih vrst, ki se uporablja za ustvarjanje spremenljivk. Podatkovni tip definira notranjo predstavitev podatkov, niz vrednosti, ki jih lahko sprejme predmet, in veljavna dejanja, ki jih je mogoče izvesti na objektu.

Jezik C# ima naslednje primitivne vrste podatkov:

    bool : shrani vrednost true ali false (logični literali). Predstavljen s tipom sistema System.Boolean

    Bool živ = res; bool isDead = false;

    bajt: shrani celo število od 0 do 255 in zavzema 1 bajt. Predstavljen z vrsto sistema System.Byte

    Bajt bit1 = 1; bajt bit2 = 102;

    sbyte: shrani celo število od -128 do 127 in zavzema 1 bajt. Predstavljen z vrsto sistema System.SByte

    Sbyte bit1 = -101; sbyte bit2 = 102;

    short : shrani celo število od -32768 do 32767 in zavzame 2 bajta. Predstavljen s tipom sistema System.Int16

    Kratek n1 = 1; kratek n2 = 102;

    ushort: shrani celo število od 0 do 65535 in zavzame 2 bajta. Predstavljen z vrsto sistema System.UInt16

    Ukratek n1 = 1; ukratek n2 = 102;

    int: shrani celo število od -2147483648 do 2147483647 in zavzema 4 bajte. Predstavljen z vrsto sistema System.Int32. Vsi celoštevilski literali privzeto predstavljajo int vrednosti:

    Int a = 10; int b = 0b101; // binarna oblika b =5 int c = 0xFF; // šestnajstiška oblika c = 255

    uint: shrani celo število od 0 do 4294967295 in zavzema 4 bajte. Predstavljen z vrsto sistema System.UInt32

    Uint a = 10; uint b = 0b101; uint c = 0xFF;

    long : shrani celo število od –9,223,372,036,854,775,808 do 9,223,372,036,854,775,807 in zavzema 8 bajtov. Predstavljen z vrsto sistema System.Int64

    Dolgi a = -10; dolg b = 0b101; dolgo c = 0xFF;

    ulong: shrani celo število od 0 do 18,446,744,073,709,551,615 in zavzame 8 bajtov. Predstavljen z vrsto sistema System.UInt64

    Ulong a = 10; ulong b = 0b101; ulong c = 0xFF;

    float : shrani število s plavajočo vejico od -3,4*10 38 do 3,4*10 38 in zavzema 4 bajte. Predstavljen z vrsto sistema System.Single

    dvojno : shrani število s plavajočo vejico od ±5,0*10 -324 do ±1,7*10 308 in zavzema 8 bajtov. Predstavljen s tipom sistema System.Double

    decimal: shrani decimalno število ulomka. Če se uporablja brez decimalne vejice, ima vrednost od ±1,0*10 -28 do ±7,9228*10 28, lahko shrani 28 decimalnih mest in zavzema 16 bajtov. Predstavljen s tipom sistema System.Decimal

    char: shrani en znak v Unicode in zavzema 2 bajta. Predstavljen s tipom sistema System.Char. Znakovni literali ustrezajo tej vrsti:

    Znak a = "A"; char b = "\x5A"; char c = "\u0420";

    niz : shrani nabor znakov Unicode. Predstavljen s tipom sistema System.String. Temu tipu ustrezajo znakovni literali.

    String hello = "Pozdravljeni"; beseda niza = "svet";

    objekt : lahko shrani vrednost katere koli podatkovne vrste in zaseda 4 bajte na 32-bitni platformi in 8 bajtov na 64-bitni platformi. Predstavljen s sistemskim tipom System.Object, ki je osnovni tip za vse druge tipe in razrede .NET.

    Objekt a = 22; objekt b = 3,14; objekt c = "hello code";

Na primer, definirajmo več spremenljivk različnih vrst in prikažimo njihove vrednosti na konzoli:

Uporaba sistema; imenski prostor HelloApp ( class Program ( static void Main(string args) ( string name = "Tom"; int age = 33; bool isEmployed = false; double weight = 78.65; Console.WriteLine($"Name: (name)"); Console.WriteLine($"Age: (starost)"); Console.WriteLine($"Weight: (weight)"); Console.WriteLine($"Working: (is Employed)" ) )

Za izpis podatkov v konzolo se tukaj uporablja interpolacija: znak $ je postavljen pred vrstico in po tem lahko vnesemo spremenljive vrednosti v vrstico v zavitih oklepajih. Konzolni izhod programa:

Ime: Tom Starost: 33 Teža: 78,65 Dela: False

Uporaba pripon

Pri dodeljevanju vrednosti upoštevajte naslednjo subtilnost: vsi resnični literali se obravnavajo kot vrednosti tipa dvojno. Če želite označiti, da delno število predstavlja plavajoči ali decimalni tip, morate literalu dodati pripono: F/f za lebdeče in M/m za decimalno.

Podobno se vsi celoštevilski literali obravnavajo kot int vrednosti. Če želite eksplicitno označiti, da celoštevilski literal predstavlja vrednost tipa uint, uporabite pripono U/u, za tip long uporabite pripono L/l in za tip ulong uporabite pripono UL/ul:

Uint a = 10U; dolg b = 20L; udolg c=30UL;

Uporaba vrst sistemov

Zgoraj, pri naštevanju vseh osnovnih tipov podatkov, je bil za vsakega omenjen tip sistema. Ker je ime vgrajene vrste v bistvu okrajšava za vrsto sistema. Na primer, naslednje spremenljivke bodo enakovredne po vrsti:

Int a = 4; System.Int32 b = 4;

Implicitno tipkanje

Prej smo izrecno določili vrsto spremenljivk, na primer int x; . In prevajalnik je že ob zagonu vedel, da x shrani celoštevilsko vrednost.

Vendar pa lahko uporabimo tudi implicitni model tipkanja:

Var hello = "Pekel svetu"; var c = 20; Console.WriteLine(c.GetType().ToString()); Console.WriteLine(hello.GetType().ToString());

Za implicitno tipkanje se namesto imena podatkovnega tipa uporabi ključna beseda var. Nato med prevajanjem prevajalnik sam sklepa o tipu podatkov na podlagi dodeljene vrednosti. Zgornji primer je uporabil izraz Console.WriteLine(c.GetType().ToString()); , ki nam omogoča, da ugotovimo domnevno vrsto spremenljivke c. Ker so privzeto vse celoštevilske vrednosti obravnavane kot vrednosti int, bo spremenljivka c na koncu vrste int ali System.Int32

Te spremenljivke so podobne običajnim, vendar imajo nekatere omejitve.

Prvič, ne moremo najprej deklarirati implicitno tipizirane spremenljivke in jo nato inicializirati:

// ta koda deluje v a; a = 20; // ta koda ne deluje var c; c= 20;

Drugič, ne moremo podati null kot vrednost implicitno vnesene spremenljivke:

// ta koda ne deluje var c=null;

Ker je vrednost ničelna, prevajalnik ne bo mogel ugotoviti vrste podatkov.

dvojno ali decimalno

Iz zgornjega seznama podatkovnih tipov je očitno, da če želimo v programu uporabiti številke do 256, lahko za njihovo shranjevanje uporabimo spremenljivke tipa bajt. Pri uporabi velikih vrednosti lahko vzamemo tip short, int, long. Enako za ulomka - za navadna ulomka lahko vzamete tip float, za zelo velika ulomka - dvojni tip. Decimalni tip tukaj izstopa v smislu, da kljub večji bitni zmogljivosti v primerjavi z dvojnim tipom dvojni tip lahko shrani večjo vrednost. Vendar lahko decimalna vrednost vsebuje do 28 decimalnih mest, dvojna vrednost pa lahko vsebuje 15-16 decimalnih mest.

Decimalno število se pogosteje uporablja pri finančnih izračunih, dvojno pa pri matematičnih operacijah. Splošne razlike med tema dvema vrstama lahko povzamemo v naslednji tabeli.