Урок C ++ за работа с поплавъци и инти

click fraud protection

Инт е цяло число като 47 без десетична запетая. Не можете да имате 4,5 бебета или цикъл 32,9 пъти. Можете да имате 25,76 долара, ако използвате флоат. Така че, когато създавате вашата програма, трябва да решите кой тип да използвате.

Това правят някои скриптови езици? Тъй като е неефективен, поплавките заемат повече памет и като цяло са по-бавни от ints. Също така не можете лесно да сравните два поплавъка, за да видите дали те са равни като вас с ints.

За да манипулирате числата, трябва да ги съхранявате в паметта. Тъй като стойността може да бъде лесно променена, тя се нарича променлива.

Най- съставител който чете вашата програма и я преобразува в машинен код, трябва да знае какъв тип е, т.е. дали е int или float, така че преди вашата програма да използва променлива, трябва декларират то.

Ще забележите, че променливата Counter е зададена на 0. Това е незадължителна инициализация. Много добра практика е да се инициализират променливи. Ако не инициализирате и след това ги използвате в код, без да сте задали начална стойност, променливата ще започне с произволна стойност, която може да "разбие" кода ви. Стойността ще бъде каквато е била в паметта при зареждане на програмата.

instagram viewer

Кое е най-голямото число, което един инт може да съхранява?. Е, зависи от вида на процесор но е общоприето като 32 бита. Тъй като може да побере почти толкова отрицателни стойности, колкото положителни, диапазонът на стойностите е +/- 2-32 до 232 или -2,147,483,648 до + 2147,483,647.

Това е за подписан Int, но има и неподписан int, който държи нула или положително. Той има диапазон от 0 до 4 294 967 295. Просто запомни - неподписаните вписвания не се нуждаят от знак (като + или -1) пред тях, защото те са винаги положителни или 0.

Има по-къс тип int, случайно наречен short int, който използва 16 бита (2 байта). Това държи числа в диапазона от -32768 до +32767. Ако използвате голям umber of ints, евентуално можете да спестите памет, като използвате кратки вписвания. Няма да е по-бързо, въпреки че е половината от размера. 32 битови процесори извличат стойности от паметта в блокове от 4 байта наведнъж. Т.е. 32 бита (Оттук и името - 32 битов процесор!). Така че получаването на 16 бита все още изисква извличане на 32 бита.

Има по-дълъг 64 битов повикан много дълго в В. Някои компилатори на C ++, докато не поддържат този тип, директно използват алтернативно име - напр. както Borland, така и Microsoft използват _int64. Това има диапазон от -9223372036854775807 до 9223372036854775807 (подписано) и 0 до 18446744073709551615 (неподписано).

Освен ако не правите научно програмиране с много големи или малки числа, ще използвате двойници само за по-голяма точност. Поплавките са добри за 6 цифри на точност, но двойните предлагат 15.

Помислете за числото 567.8976523. Това е валидна float стойност. Но ако го отпечатаме с този код по-долу, можете да видите липса на прецизност. Числото има 10 цифри, но се съхранява в плаваща променлива само с шест цифри с точност.

виждам Относно входа и изхода за подробности за това как работи cout и как да се използва прецизност. Този пример задава точността на изхода на 8 цифри. За съжаление плаващите могат да съдържат само 6, а някои компилатори ще издадат предупреждение за конвертирането на двойник в плаваща. Когато стартирате, това отпечатва 567.89764

Ако промените точността на 15, тя се отпечатва като 567.897644042969. Доста разлика! Сега преместете десетичната запетая две вляво, така че стойността е 5.678976523 и повторно стартирайте програмата. Този път той извежда 5.67897653579712. Това е по-точно, но все пак е различно.

Ако промените типа стойност на двойна и точността на 10, тя ще отпечата стойността точно както е дефинирана. Като общо правило, поплавките са удобни за малки, нецелочислени числа, но с повече от 6 цифри, трябва да използвате двойници.

Писането на компютърен софтуер не би било много полезно, ако не можете да направите събиране, изваждане и т.н. Ето пример 2.

Освен като допълнение, можете да правите изваждане, умножение и деление. Просто използвайте + за събиране, - за изваждане, * за умножение и / за деление.

С плаващите знаци нямате контрол над това колко десетични знака се показват, освен ако не зададете точността, както е показано по-рано.

Сега ширината, подравняването, броят на десетичните знаци и знаците могат да бъдат зададени от Cout обект и iomanip включват файлови функции.

Хилядите разделители са малко по-сложни. Те се задават от локала на компютър. Локалът съдържа информация, свързана с вашата страна - например символи на валута и десетична запетая и хиляди разделители. Във Великобритания и САЩ числото 100.98 използва десетична запетая. като десетична запетая, докато в някои европейски страни тя е запетая, така че 5,70 евро означава цена от 5 евро и 70 цента.

създава обект mpunct което е препратка към a moneypunct клас шаблон. Това има информация за определения локал - в нашия случай thousands_sep () метод връща символа, използван за хиляда разделител.

Забележка Изглежда има различия между различните съставители за това как cout.imbue се държи. Под Visual C ++ 2005 Express Edition, това включва разделители. Но същият код с Microsoft Visual C ++ 6.0 не!

Ако използвате някой от тези два режима на форматиране през cout.setf тогава прецизност() задава броя на десетичните знаци след десетичната запетая (не общия брой цифри), но губите хиляди форматиране. Също задни нули (както беше разрешено от ios_base:: showpoint ) стават автоматично активирани, без да е необходимо showpoint.

Можете да очаквате нещо като стойност от 11.0909090909. Всъщност стойността е 11. Защо е това? защото изразяване от дясната страна (известна като rvalue) е цяло число / цяло число. Така че използва аритметика с цяло число, която изхвърля дробната част и присвоява 11 на f. Промяна на

В C няма такъв тип като булев. Изразът в C се основаваше на това, че нулата е невярна или ненулева е вярна. В C ++ типа булев може да приеме стойностите вярно или фалшив. Тези стойности все още са еквивалентни на 0 и 1. Някъде в компилатора ще има а

Или поне действа така! Двата реда по-долу са валидни без кастинг, така че зад кулисите, булите имплицитно се превръщат в ints и дори могат да се увеличават или намаляват, въпреки че това е много лоша практика.

Ако все пак ще направи if, тъй като лошата променлива е не нула, но това е лош код и трябва да се избягва. Добра практика е да ги използвате по предназначение. ако (! v) е валиден C ++, но предпочитам по-изричното ако (v! = 0). Това обаче е въпрос на вкус, а не на трябва да директива.

по-добре е компилаторът да улавя грешки по време на компилиране, отколкото потребителят по време на изпълнение

instagram story viewer