En int er et helt tal som 47 uden et decimalpoint. Du kan ikke have 4,5 babyer eller loop 32,9 gange. Du kan have $ 25,76, hvis du bruger en float. Så når du opretter dit program, skal du beslutte, hvilken type du vil bruge.
Dette er hvad nogle scripting-sprog gør? Fordi det er ineffektivt, tager floats mere hukommelse og er generelt langsommere end ints. Du kan heller ikke let sammenligne to flydere for at se, om de er ens, som du kan med ints.
For at manipulere numre skal du gemme dem i hukommelsen. Da værdien let kan ændres, kaldes den en variabel.
Det compiler der læser dit program og konverterer det til maskinkode skal vide, hvilken type det er, dvs. om det er en int eller en float, så inden dit program bruger en variabel, skal du erklære det.
Du vil bemærke, at Counter-variablen er indstillet til 0. Dette er en valgfri initialisering. Det er en meget god praksis at initialisere variabler. Hvis du ikke initialiserer og derefter bruger dem i kode uden at have indstillet en startværdi, starter variablen med en tilfældig værdi, der muligvis 'bryder' din kode. Værdien er, hvad der var i hukommelsen, da programmet blev indlæst.
Hvad er det største antal, en int kan gemme?. Det afhænger af typen CPU men det accepteres generelt som 32 bit. Da det kan indeholde næsten lige så mange negative værdier som positive, er værdiområdet +/- 2-32 til 232 eller -2,147.483.648 til +2.147.483.647.
Dette er til et underskrevet int, men der er også en usigneret int der holder nul eller positivt. Det har en rækkevidde fra 0 til 4.294.967.295. Bare husk - usignerede ints behøver ikke et tegn (som + eller -1) foran dem, fordi de altid er positive eller 0.
Der er en kortere int-type, tilfældigtvis kaldet kort int, der bruger 16 bit (2 byte). Dette har tal i området -32768 til +32767. Hvis du bruger en stor umber af ints, kan du muligvis gemme hukommelse ved at bruge korte ints. Det vil ikke være hurtigere, på trods af at det er halvt så stort. 32 bit CPU'er henter værdier fra hukommelsen i blokke på 4 byte ad gangen. Dvs. 32 bit (deraf navnet - 32 bit CPU!). Så hentning af 16 bit kræver stadig en 32 bit hentning.
Der kaldes en længere 64 bit lang lang i C. Nogle C ++ kompilatorer, mens de ikke understøtter denne type, bruger direkte et alternativt navn - f.eks. både Borland og Microsoft bruger _int64. Dette har en rækkevidde fra -9223372036854775807 til 9223372036854775807 (underskrevet) og 0 til 18446744073709551615 (usigneret).
Medmindre du laver videnskabelig programmering med meget store eller små tal, bruger du kun dobbeltværker til større præcision. Floats er gode til 6 cifre nøjagtighed, men dobbeltværelser tilbyder 15.
Overvej tallet 567.8976523. Det er en gyldig flydeværdi. Men hvis vi udskriver det med denne kode nedenfor, kan du se mangel på præcision vises. Tallet har 10 cifre, men gemmes i en flydevariabel med kun seks cifre præcision.
Se Om input og output for detaljer om, hvordan cout fungerer, og hvordan man bruger præcision. Dette eksempel indstiller outputpræcisionen til 8 cifre. Desværre kan flydende kun indeholde 6, og nogle compilere vil give en advarsel om at konvertere en dobbelt til en float. Når det køres, udskrives dette 567.89764
Hvis du ændrer præcisionen til 15, udskrives den som 567.897644042969. En ganske forskel! Flyt nu decimalpunktet to til venstre, så værdien er 5.678976523 og kør programmet igen. Denne gang det output 5,67897653579712. Dette er mere nøjagtigt, men stadig anderledes.
Hvis du ændrer værdienstypen til dobbelt og præcisionen til 10, udskriver den værdien nøjagtigt som defineret. Som hovedregel er floats praktiske til små, ikke heltal, men med mere end 6 cifre skal du bruge dobbelt.
At skrive computersoftware ville ikke være meget nyttigt, hvis du ikke kunne gøre tilføjelse, subtraktion osv. Her er eksempel 2.
Såvel som tilføjelse, kan du udføre subtraktion, multiplikation og opdeling. Brug bare + til tilføjelse, - til subtraktion, * til multiplikation og / til opdeling.
Med flydere har du ingen kontrol over, hvor mange decimaler der vises, medmindre du indstiller præcisionen som vist tidligere.
Nu kan bredde, justering, antal decimaler og tegn indstilles af cout objekt og iomanip inkluderer filfunktioner.
Tusinder separatorer er lidt mere komplicerede. De er indstillet fra en pc. En lokalitet indeholder oplysninger, der er relevante for dit land - f.eks. Valutasymboler og decimaler og tusinder af separatorer. I Storbritannien og USA bruger tallet 100,98 et decimalpoint. som decimalpunkt, hvorimod det i nogle europæiske lande er et komma, så € 5,70 betyder en pris på 5 euro og 70 cent.
skaber et objekt mpunct som er en henvisning til en moneypunct skabelon klasse. Dette har oplysninger om det specificerede landesprog - i vores tilfælde thousands_sep () metoden returnerer det tegn, der bruges til tusinder af separatorer.
Bemærk Der ser ud til at være uoverensstemmelser mellem forskellige samlere om, hvordan cout.imbue opfører sig. Under Visual C ++ 2005 Express Edition inkluderede dette separatorer. Men den samme kode med Microsoft Visual C ++ 6.0 gjorde det ikke!
Hvis du bruger en af disse to formateringstilstande gennem cout.setf derefter præcision() angiver antallet af decimaler efter decimalpunktet (ikke det samlede antal cifre), men du mister de tusinder af formatering. Også bageste nuller (som blev aktiveret af ios_base:: showpoint ) aktiveres automatisk uden behov showpoint.
Du kunne forvente noget som en værdi af 11.0909090909. Faktisk er værdien 11. Hvorfor er det? fordi ekspression på højre side (kendt som en højreværdi) er heltal / heltal. Så det bruger heltal-aritmetik, der kaster fraktionsdelen og tildeler 11 til f. Ændrer det til
I C er der ikke sådan en type som bool. Udtryk i C var baseret på, at et nul var falsk, eller at et ikke-nul var sandt. I C ++ typen bool kan tage værdierne rigtigt eller falsk. Disse værdier svarer stadig til 0 og 1. Et sted i kompilatoren vil den have en
Eller i det mindste fungerer den sådan! De to linjer nedenfor er gyldige uden at støbe, så bag kulisserne konverteres implicit til ints og kan endda øges eller dekrementeres, selvom dette er meget dårlig praksis.
If vil stadig gøre if, da den dårlige variabel ikke er nul, men den er dårlig kode og bør undgås. God praksis er at bruge dem, som de er beregnet til. hvis (! v) er gyldig C ++, men jeg foretrækker det mere eksplicitte hvis (v! = 0). Dette er dog et spørgsmål om smag, ikke en må gøre direktiv.
det er bedre for kompilatoren at fange fejl på kompileringstidspunktet end brugeren ved kørsel