§ 2. Арганізацыя вылічэнняў
2.3. Цэлалікавы тып даных
Часта пры рашэнні задач трэба працаваць з цэлымі лікамі. Для гэтага ў C++ выкарыстоўваецца тып даных int. З дапамогай пераменных тыпу можна задаваць цэлыя лікі з дыяпазону ад –2147483648 да 2147483647. Для гэтага тыпу даных вызначаны наступныя аперацыі:
У С++ для дзялення як цэлых, так і рэчаісных лікаў выкарыстоўваецца адзін і той жа знак «/». Будзе вынік цэлым ці рэчыўным, залежыць ад аперандаў (пераменных ці лікаў, якія стаяць злева і справа ад знака). Калі хоць бы адзін аперанд рэчыўны, то вынік будзе рэчыўным. Калі абодва аперанды цэлыя, то і вынік будзе цэлым. Аперацыя «%» адпавядае аперацыі mod у мове праграміравання Pascal і выкарыстоўваецца толькі для цэлых лікаў. Прыклад 2.6. Дадзены два цэлыя лікі a і b. Напісаць праграму, якая знаходзіць цэлую частку і астачу ад дзялення a на b. Этапы выканання задання I. Зыходныя даныя: пераменныя a і b. II. Вынік: пераменныя c (цэлалікавая дзель) і d (астача). III. Алгарытм рашэння задачы. 1. Увод зыходных даных. IV. Апісанне пераменных: a, b, c, d — int. Значэнне, якое выдае ў якасці выніку аперацыя %, можа адрознівацца ад матэматычнага азначэння астачы (у матэматыцы пад астачай разумеюць неадмоўны лік). Калі астача не роўна нулю, то знак ліку, які з’яўляецца вынікам аперацыі %, вызначаецца знакамі аперандаў (прыклад 2.7). Калі прааналізаваць даныя з табліцы, то можна зразумець, што [1] Пры выкананні арыфметычных аперацый трэба памятаць, што спачатку аперацыя выконваецца ў адпаведнасці з тыпамі аперандаў, а затым адбываецца пераўтварэнне атрыманага тыпу да тыпу выніку. Напрыклад, няхай у праграме запісана каманда: double x = 16 / 7; Спачатку будзе выканана дзяленне 16 на 7 (цэлалікавае), у выніку атрымаем 2. Пасля чаго цэлае значэнне 2 будзе пераўтворана да рэчыўнага значэння 2.0. Каб атрымаць рэчыўны вынік, неабходна, каб хаця б адзін лік быў рэчыўным. Каманду можна запісаць, напрыклад, так: double x = 16. / 7; Калі ў аператары прысвойвання выкарыстоўваюцца не канстанты, а пераменныя, то неабходна пераўтварыць выраз так, каб дзеянні выконваліся з патрэбным тыпам. Напрыклад, аператар прысвойвання double x = a / b; у якім a і b цэлалікавыя пераменныя, можна запісаць так: double x = 1. * a / b; Тады вынік аперацыі множання будзе рэчыўным і дзяленне будзе выконвацца для рэчаісных лікаў. |
Тып int з’яўляецца базавым цэлалікавым тыпам. Іншыя цэлалікавыя тыпы можна атрымліваць, прыпісваючы да int мадыфікатары. Адрозніваюць два тыпы мадыфікатараў, якія могуць змяняць знакавасць ці памер. Знакавасць: signed — тып будзе мець знакавае ўяўленне (выкарыстоўваецца па змоўчанні, калі мадыфікатар не вызначаны); unsigned — тып будзе мець бяззнакавае ўяўленне. Памер: short — тып будзе займаць у памяці не менш за 16 біт; long — тып будзе мець памер, не меншы за 32 біт; long long — тып будзе мець памер, не меншы за 64 біты. Прыклады выкарыстання мадыфікатараў:
Калі пры апісанні выкарыстоўваюць мадыфікатары, то слова int можа быць прапушчана. Наступныя апісанні эквівалентныя: Прыклад 2.6. V. Праграма:
IV. Тэсціраванне праграмы: Запусціце праграму і ўвядзіце значэння a = 11 и b = 4. Вынік павінен быць наступным: Прыклад 2.7. Вынік аперацый div і mod для розных лікаў:
У мове С++ дапускаецца відавочнае пераўтварэнне тыпаў. Для гэтага выкарыстоўваецца каманда static_cast<dataType>(value) Тут dataType — імя тыпу, да якога трэба пераўтварыць велічыню value. У кодзе праграмы гэта каманда выкарыстоўваецца наступным чынам: double x = static_cast<double>(a)/b; Таксама кампілятарам С++ падтрымліваецца так званы Cі-стыль прывядзення тыпаў даных, калі новы тып паказваецца ў дужках перад імем пераменнай: double x = (double)a / b; Кампілятар C++ таксама дазваляе выкарыстоўваць гэты аператар і наступным чынам: double x = double(a) / b; Аднак такое пераўтварэнне лічыцца небяспечным, паколькі кампілятар не правярае выхад за мяжу магчымых значэнняў тыпу. |