Svmmarivm
Expressio arithmetica non a sinistra ad dextram compvtatvr, vt legitvr, sed secvndvm strvctvram occvltam, arborem svam, qvam praecedentia operatorvm, eorvm associativitas et parentheses figvnt; et in qvoqve nodo hvivs arboris genvs operandorvm decernit qvae operatio fiat, ita vt 7 / 2 valeat 3 et 7 / 2.0 valeat 3.5. Haec lectio qvinqve operatores arithmeticos lingvae C++ cvm integris et cvm realibvs tractat; divisionem integram et residvvm, qvae inde a C++11 versvs nihilvm trvncant, vnde seqvitvr residvvm signvm dividendi svmere et a residvo divisionis Evclideae differre cvm dividendvs negativvs est; modvm residvi Evclidei obtinendi; arborem expressionis; genvs eventvs cvm operandi diversorvm genervm svnt; et dvos modos qvibvs expressio arithmetica integra significationem svam amittit: per nihilvm dividere et in compvtatione intermedia exvndare.
Proposita discendi
- Qvotientem et residvvm divisionis integrae in C++ compvtare, etiam cvm operandis negativis, eaqve cvm qvotiente et residvo divisionis Evclideae conferre.
- Arborem expressionis arithmeticae secvndvm praecedentiam et associativitatem delineare, eivsqve valorem compvtare.
- Genvs eventvs operationis inter operandos diversorvm genervm praedicere.
- Divisione integra et residvo vti ad qvantitates resolvendas: digitos nvmeri, dvrationem in horis et minvtis, diem hebdomadis.
Operatores arithmetici
C++ qvinqve operatores arithmeticos binarios habet: additionem +, svbtractionem -, mvltiplicationem *, divisionem / et residvvm %; habet praeterea minvs vnarivm, qvod signvm vnici svi operandi mvtat, vt in -x, et plvs vnarivm, +x, qvod evm vt est relinqvit. Qvattvor priores in integris et in realibvs adhibentvr; residvvm, in integris tantvm. Atqvi eadem scriptvra non eandem operationem in omnibvs casibvs designat: si ambo operandi operatoris / integri svnt, divisio est integra eivsqve eventvs integer est, qvotiens sine fractione sva; si altervter realis est, divisio realis est. Lectio Characteres, valores Booleani, conversiones et constantes conseqventiam hvivs regvlae maxime conspicvam ostendit, scilicet double r{7 / 2}; valorem 3 servare: divisio inter integros facta est anteqvam eventvs in realem converteretvr.
Programma qvinqve operatores ad 17 et 5 adhibet, et divisionem cvm dividendo reali repetit.
#include <print>int main(){ const int a{17}; const int b{5}; std::println("{} + {} = {}", a, b, a + b); std::println("{} - {} = {}", a, b, a - b); std::println("{} * {} = {}", a, b, a * b); std::println("{} / {} = {}", a, b, a / b); std::println("{} % {} = {}", a, b, a % b); const double x{17.0}; std::println("{} / {} = {}", x, b, x / b);}17 + 5 = 2217 - 5 = 1217 * 5 = 8517 / 5 = 317 % 5 = 217 / 5 = 3.417 per 5 divisa dant 3 et svpersvnt 2: svnt qvotiens et residvvm cvm 17 res in catervas qvinarvm rervm distribvvntvr. Vltimvs versvs realem per integrvm dividit et 3.4 obtinet. Animadvertendvm est std::println realem 17.0 vt «17» scribere: signvm loci vacvvm brevissimam valoris repraesentationem scribit, ita vt qvod scribitvr genvs non patefaciat; vt id videatvr, decimalia per {:.1f} postvlantvr.
Operator % reales non admittit. Scribere 7.5 % 2 non est error logicae qvem programma inter exseqvendvm detegat, sed error compilationis: compilator dicit operandos genervm double et int ad operatorem non valere.
#include <print>int main(){ std::println("{}", 7.5 % 2);}main.cpp: In function ‘int main()’:main.cpp:5:28: error: invalid operands of types ‘double’ and ‘int’ to binary ‘operator%’ 5 | std::println("{}", 7.5 % 2); | ~~~ ^ ~Residvvm divisionis realis exstat, idqve compvtat fvnctio std::fmod capitis <cmath>, qvae in lectione Bit et bibliotheca mathematica tractabitvr, vna cvm potentia: C++ operatorem potentiae non habet, et 2 ^ 3 non valet 8, sed alivd qvod ibi explicabitvr.
Argvmentvm oneratvr…