Een int is een geheel getal zoals 47 zonder een decimaalteken. Je kunt geen 4,5 baby's krijgen of 32,9 keer lussen. Je kunt $ 25,76 krijgen als je een float gebruikt. Dus wanneer u uw programma maakt, moet u beslissen welk type u wilt gebruiken.
Dit is wat sommige scripttalen doen? Omdat het inefficiënt is, nemen floats meer geheugen in beslag en zijn ze over het algemeen langzamer dan ints. Ook kun je niet gemakkelijk twee dobbers vergelijken om te zien of ze gelijk zijn zoals je kunt met ints.
Om nummers te manipuleren, moet u ze in het geheugen opslaan. Omdat de waarde gemakkelijk kan worden gewijzigd, wordt het een variabele genoemd.
De compiler die uw programma leest en omzet in machinecode, moet weten welk type het is, d.w.z. of het een int of een float is, dus voordat uw programma een variabele gebruikt, moet u verklaren het.
U zult merken dat de variabele Counter is ingesteld op 0. Dit is een optionele initialisatie. Het is een zeer goede gewoonte om variabelen te initialiseren. Als u niet initialiseert en ze vervolgens in code gebruikt zonder een beginwaarde in te stellen, begint de variabele met een willekeurige waarde die uw code kan 'breken'. De waarde is wat er in het geheugen was toen het programma werd geladen.
Wat is het grootste aantal dat een int kan opslaan?. Nou, het hangt af van het type CPU maar het wordt algemeen geaccepteerd als 32 bits. Omdat het bijna net zoveel negatieve waarden kan bevatten als positief, is het bereik van waarden +/- 2-32 tot 232 of -2.147.483.648 tot +2.147.483.647.
Dit is voor een ondertekende int, maar er is ook een niet ondertekend int die nul of positief bevat. Het heeft een bereik van 0 tot 4.294.967.295. Denk eraan - niet-ondertekende ints hebben geen teken (zoals + of -1) ervoor nodig omdat ze altijd positief of 0 zijn.
Er is een korter type int, dat toevallig kort int wordt genoemd en dat 16 bits (2 bytes) gebruikt. Dit bevat nummers in het bereik van -32768 tot +32767. Als u een groot aantal ints gebruikt, kunt u mogelijk geheugen besparen door korte ints te gebruiken. Sneller gaat het niet, ondanks dat het maar half zo groot is. 32-bits CPU's halen waarden uit het geheugen op in blokken van 4 bytes tegelijk. D.w.z. 32 bits (vandaar de naam: 32 bit CPU!). Het ophalen van 16 bits vereist dus nog steeds een 32-bits ophaalactie.
Er wordt een langere 64 bit genoemd lang Lang in C. Sommige C ++ -compilers gebruiken dat type niet en gebruiken direct een alternatieve naam, b.v. zowel Borland als Microsoft gebruiken _int64. Dit heeft een bereik van -9223372036854775807 tot 9223372036854775807 (ondertekend) en 0 tot 18446744073709551615 (niet ondertekend).
Tenzij u wetenschappelijk programmeert met zeer grote of kleine getallen, gebruikt u alleen dubbels voor een grotere precisie. Floats zijn goed voor 6 cijfers van nauwkeurigheid, maar doubles bieden 15.
Beschouw het nummer 567.8976523. Het is een geldige float-waarde. Maar als we het afdrukken met deze onderstaande code, ziet u een gebrek aan precisie verschijnen. Het nummer heeft 10 cijfers, maar wordt opgeslagen in een float-variabele met slechts zes precisiecijfers.
Zien Over invoer en uitvoer voor meer informatie over hoe cout werkt en hoe u precisie kunt gebruiken. In dit voorbeeld wordt de uitvoerprecisie ingesteld op 8 cijfers. Helaas kunnen drijvers slechts 6 bevatten en sommige compilers geven een waarschuwing over het omzetten van een dubbele naar een dobber. Wanneer uitgevoerd, wordt dit afgedrukt 567.89764
Als u de precisie wijzigt in 15, wordt deze afgedrukt als 567.897644042969. Nogal een verschil! Verplaats nu de decimale punt twee naar links zodat de waarde 5.678976523 is en voer het programma opnieuw uit. Deze keer geeft het 5.67897653579712 weer. Dit is nauwkeuriger, maar nog steeds anders.
Als u het type waarde wijzigt in verdubbelen en de precisie in 10, wordt de waarde exact afgedrukt zoals gedefinieerd. Over het algemeen zijn floats handig voor kleine, niet-gehele getallen, maar met meer dan 6 cijfers moet u dubbele waarden gebruiken.
Het schrijven van computersoftware zou niet veel gebruiken als u geen optellen, aftrekken enz. Zou kunnen doen. Hier is voorbeeld 2.
Naast optellen kunt u ook aftrekken, vermenigvuldigen en delen. Gebruik gewoon + voor optellen, - voor aftrekken, * voor vermenigvuldigen en / voor delen.
Met floats hebt u geen controle over hoeveel decimale punten worden weergegeven, tenzij u de precisie instelt zoals eerder getoond.
Nu kunnen breedte, uitlijning, aantal decimalen en tekens worden ingesteld met de Cout object en iomanip inclusief bestandsfuncties.
Duizenden scheidingstekens zijn iets ingewikkelder. Ze worden ingesteld vanaf de locatie van een pc. Een landinstelling bevat informatie die relevant is voor uw land, zoals valutasymbolen en komma en duizenden scheidingstekens. In het VK en de VS gebruikt het getal 100,98 een decimaalteken. als decimaal punt, terwijl het in sommige Europese landen een komma is, dus € 5,70 betekent een prijs van 5 euro en 70 cent.
creëert een object mpunct dat is een verwijzing naar een moneypunct sjabloonklasse. Dit bevat informatie over de opgegeven landinstelling - in ons geval de duizenden_sep () methode retourneert het teken dat wordt gebruikt voor het scheidingsteken voor duizenden.
Notitie Er lijken verschillen te bestaan tussen verschillende compilers over hoe cout.imbue gedraagt zich. Onder Visual C ++ 2005 Express Edition omvatte dit scheidingstekens. Maar dezelfde code met Microsoft Visual C ++ 6.0 niet!
Als u een van deze twee opmaakmodi gebruikt via de cout.setf vervolgens precisie () stelt het aantal decimalen achter de komma in (niet het totale aantal cijfers) maar u verliest de opmaak van duizenden. Ook volgnullen (zoals ingeschakeld door ios_base:: showpoint ) worden automatisch ingeschakeld zonder dat dit nodig is showpoint.
Je zou zoiets als een waarde van 11.0909090909 verwachten. In feite is de waarde 11. Waarom is dit? omdat de uitdrukking aan de rechterkant (bekend als een waarde) is geheel getal / geheel getal. Dus het gebruikt integer rekenkunde die het fractionele deel weggooit en 11 toekent aan f. Veranderen naar
In C bestaat er geen type als a dwaas. Uitdrukkingen in C waren gebaseerd op een nul zijnde onwaar of een niet-nul zijnde waar. In C ++ het type dwaas kan de waarden aannemen waar of fout. Deze waarden zijn nog steeds gelijk aan 0 en 1. Ergens in de compiler zal het een hebben
Of het gedraagt zich tenminste zo! De twee onderstaande regels zijn geldig zonder te casten, dus achter de schermen worden bools impliciet geconverteerd naar ints en kunnen zelfs worden verhoogd of verlaagd, hoewel dit een zeer slechte gewoonte is.
De if zal nog steeds de if uitvoeren omdat de slechte variabele niet nul is, maar het is slechte code en moet worden vermeden. Het is een goede gewoonte om ze te gebruiken zoals ze bedoeld zijn. if (! v) is geldig C ++ maar ik geef de voorkeur aan de meer expliciete als (v! = 0). Dat is echter een kwestie van smaak, geen a moet doen richtlijn.
het is beter voor de compiler om fouten op te vangen tijdens het compileren dan de gebruiker tijdens runtime