C ++ Tutorial for håndtering av flyter og ints

En int er et helt tall som 47 uten desimal. Du kan ikke ha 4,5 babyer eller sløyfe 32,9 ganger. Du kan ha $ 25,76 hvis du bruker en flottør. Så når du lager programmet ditt, må du bestemme hvilken type du vil bruke.

Dette er hva noen skriptspråk gjør? Fordi det er ineffektivt, tar flytere mer minne og er generelt tregere enn ints. Du kan heller ikke enkelt sammenligne to flottører for å se om de er like som du kan med ints.

For å manipulere tall må du lagre dem i minnet. Fordi verdien enkelt kan endres, kalles den en variabel.

De kompilatoren som leser programmet ditt og konverterer det til maskinkode, trenger å vite hvilken type det er, dvs. om det er en int eller en flyter, så før programmet ditt bruker en variabel, må du erklære den.

Du vil merke at Counter-variabelen er satt til 0. Dette er en valgfri initialisering. Det er en veldig god praksis å initialisere variabler. Hvis du ikke initialiserer og deretter bruker dem i kode uten å ha angitt en initialverdi, vil variabelen starte med en tilfeldig verdi som kan "ødelegge" koden din. Verdien vil være hva som var i minnet da programmet ble lastet inn.

instagram viewer

Hva er det største tallet et internt kan lagre?. Vel, det kommer an på typen prosessor men det er generelt akseptert som 32 biter. Fordi det kan inneholde nesten like mange negative verdier som positive, er verdiområdet +/- 2-32 til 232 eller -2,147,483,648 til +2,147,483,647.

Dette er for et signert int, men det er også et usignert int som holder null eller positivt. Den har et område fra 0 til 4 294 967 295. Bare husk - usignerte ints trenger ikke et tegn (som + eller -1) foran seg fordi de alltid er positive eller 0.

Det er en kortere int-type, tilfeldigvis kalt kort int som bruker 16 biter (2 byte). Dette har tall i området -32768 til +32767. Hvis du bruker et stort antall ints, kan du muligens lagre minne ved å bruke korte ints. Det blir ikke raskere, til tross for at det er halvparten av størrelsen. 32 bit CPUer henter verdier fra minnet i blokker med 4 byte om gangen. Dvs. 32 biter (derav navnet - 32 bit CPU!). Så å hente 16 biter krever fortsatt en 32-biters henting.

Det kalles en lengre 64-bit lenge lenge i C. Noen C ++ - kompilatorer mens de ikke støtter den typen, bruker direkte et alternativt navn - f.eks. både Borland og Microsoft bruker _int64. Dette har en rekkevidde fra -9223372036854775807 til 9223372036854775807 (signert) og 0 til 18446744073709551615 (usignert).

Med mindre du driver med vitenskapelig programmering med veldig store eller små tall, bruker du bare dobler for større presisjon. Flytere er bra for 6 sifre med nøyaktighet, men doblinger tilbyr 15.

Vurder nummeret 567.8976523. Det er en gyldig flyteverdi. Men hvis vi skriver ut den med denne koden nedenfor, kan du se mangel på presisjon vises. Tallet har 10 sifre, men blir lagret i en flottørvariabel med bare seks sifre med presisjon.

Se Om input og output for detaljer om hvordan cout fungerer, og hvordan du bruker presisjon. Dette eksemplet setter utgangspresisjonen til 8 sifre. Dessverre kan flottører bare inneholde 6 og noen kompilatorer vil advare om å konvertere en dobbel til en flottør. Når det kjøres, skrives dette ut 567.89764

Hvis du endrer presisjonen til 15, skrives den ut som 567.897644042969. Ganske en forskjell! Flytt nå desimalet to til venstre slik at verdien er 5.678976523 og kjør programmet på nytt. Denne gangen gir den 5.67897653579712. Dette er mer nøyaktig, men fremdeles annerledes.

Hvis du endrer verditypen til dobbel og presisjonen til 10, vil den skrive ut verdien nøyaktig som definert. Som en generell regel er flytere praktiske for små, ikke heltallstall, men med mer enn 6 sifre, må du bruke dobler.

Å skrive dataprogramvare ville ikke være til stor nytte hvis du ikke kunne gjøre tillegg, subtraksjon osv. Her er eksempel 2.

I tillegg til tillegg kan du gjøre subtraksjon, multiplikasjon og deling. Bare bruk + for tillegg, - for subtraksjon, * for multiplikasjon og / for inndeling.

Med flottører har du ingen kontroll over hvor mange desimaler som vises, med mindre du angir presisjonen som vist tidligere.

Nå kan bredde, justering, antall desimaler og tegn angis av domstol objekt og iomanip inkluderer filfunksjoner.

Tusenvis separatorer er litt mer kompliserte. De er angitt fra stedet for en PC. Et sted inneholder informasjon som er relevant for ditt land - for eksempel valutasymboler og desimaler og tusenvis avskillere. I Storbritannia og USA bruker tallet 100,98 et desimal. som desimalpoeng, mens det i noen europeiske land er et komma, så € 5,70 betyr en pris på 5 euro og 70 øre.

skaper et objekt mpunct som er en henvisning til a moneypunct malklasse. Dette har informasjon om det angitte landskapet - i vårt tilfelle, thousands_sep () metoden returnerer tegnet som brukes for tusenvis separatorer.

Merk Det ser ut til å være avvik mellom forskjellige kompilatorer med hensyn til hvordan cout.imbue oppfører seg. Under Visual C ++ 2005 Express Edition inkluderte dette separatorer. Men den samme koden med Microsoft Visual C ++ 6.0 gjorde det ikke!

Hvis du bruker en av disse to formateringsmodusene gjennom cout.setf deretter presisjon() angir antall desimaler etter desimalet (ikke det totale antallet sifre), men du mister de tusenvis formateringen. Også etterfølgende nuller (som ble aktivert av ios_base:: showpoint ) blir automatisk aktivert uten behov showpoint.

Du kan forvente noe som en verdi på 11.0909090909. Verdien er faktisk 11. Hvorfor er det sånn? fordi det uttrykk på høyre side (kjent som en rvalue) er heltall / heltall. Så den bruker heltall aritmetikk som kaster fraksjonsdelen og tildeler 11 til f. Endre det til

I C er det ingen slik type som bool. Uttrykk i C var basert på at null var falsk eller at ikke-null var sant. I C ++ typen bool kan ta verdiene ekte eller falsk. Disse verdiene tilsvarer fortsatt 0 og 1. Et sted i kompilatoren vil den ha en

Eller i det minste fungerer den slik! De to linjene nedenfor er gyldige uten avstøpning, så bak kulissene blir bools implisitt konvertert til mter og kan til og med økes eller dekrementeres, selv om dette er veldig dårlig praksis.

If vil fortsatt gjøre if, da den dårlige variabelen ikke er null, men den er dårlig kode og bør unngås. God praksis er å bruke dem slik de er ment. hvis (! v) er gyldig C ++, men jeg foretrekker det mer eksplisitte hvis (v! = 0). Det er imidlertid et spørsmål om smak, ikke et må gjøre direktiv.

det er bedre for kompilatoren å fange feil på kompileringstidspunktet enn brukeren under kjøretid

instagram story viewer