Ad argvmentvm transi
Topos Uranos

Svmmarivm

Integer programmatis non est integer mathematicae: est seqventia finita bitorvm, et nn bit exacte 2n2^n valores distinctos continere possvnt. Haec lectio hanc repraesentationem eivsqve conseqventias perscrvtatvr. Docet qvomodo integer in basi 2 et in basi 16 scribatvr et qvomodo specificationibvs formae {:b} et {:x} confirmetvr; genera integra lingvae C++ praesentat, eorvm magnitvdinem, qvae per sizeof mensvratvr, et spativm valorvm, qvod per std::numeric_limits inqviritvr; explicat qvomodo nvmeri negativi per complementvm ad dvo repraesententvr et cvr spativm valorvm non sit symmetricvm; integros cvm signo ab integris sine signo distingvit, et perscrvtatvr qvid accidat cvm operatio extra spativm valorvm exit: in integris sine signo norma eventvm definit, qvi est arithmetica modvlo 2n2^n; in integris cvm signo non definit, et programma extra omnem cavtionem cadit. Finem facit ratio qva genvs cvivsqve dati eligatvr.

Proposita discendi

  1. Integros inter bases 10, 2 et 16 convertere, et conversionem specificationibvs formae {:b} et {:x} confirmare.
  2. Spativm valorvm integri nn bitorvm cvm signo et sine signo compvtare, idqve per std::numeric_limits et sizeof confirmare.
  3. Complementvm ad dvo explicare et repraesentationem nvmeri negativi parvi in octo bit scribere.
  4. Exvndationem cvm signo, qvae modvs agendi indefinitvs est, ab exvndatione sine signo, qvae arithmetica modvlo 2n2^n est, distingvere, et eventvm posterioris praedicere.
  5. Genvs integrvm aptvm ad datvm eligere secvndvm spativm valorvm eivs praevisvm, generibvs latitvdinis fixae ex <cstdint> adhibitis cvm latitvdo refert.

Systemata positionalia

Lectio Variabiles et memoria variabilem vt cellam cvm nomine, genere et valore praesentavit. Memoria avtem digitos decimales non servat: servat bit, qvorvm vnvmqvodqve 0 vel 1 valet, in octetos octo bitorvm collecta (norma saltem octo exigit; omnia systemata hodierna exacte octo adhibent). Vt sciatvr igitvr qvos valores variabilis integra accipere possit, sciendvm est qvomodo nvmervs dvobvs tantvm digitis scribatvr, et hoc facit systema positionale basis 2.

In systemate positionali basis bb, qvisqve digitvs valet secvndvm locvm qvem occvpat: vltimvs per b0=1b^0 = 1 mvltiplicatvr, praecedens per b1b^1, qvi hvnc praecedit per b2b^2, et sic deinceps. In basi 10, 20262026 significat 2⋅103+0⋅102+2⋅101+6⋅1002 \cdot 10^3 + 0 \cdot 10^2 + 2 \cdot 10^1 + 6 \cdot 10^0. In basi 2 digiti svnt 0 et 1, et pondera svnt potentiae nvmeri 2: 1,2,4,8,16,32,64,128,…1, 2, 4, 8, 16, 32, 64, 128, \ldots Ex qvo seqvitvr regvla transevndi a binario ad decimale: addvntvr pondera locorvm in qvibvs 1 est.

ExemplvmA binario ad decimale

Figvra dispositionem octo bitorvm 00101101 legit. Svpra qvamqve cellam pondvs eivs est; bit qvae 1 valent singillatim, a sinistra ad dextram, accendvntvr, et valor pondera eorvm accvmvlat.

Demonstratio

  1. Octo cellae, omnes exstinctae: valor est 0. Pondera, a dextra ad sinistram, svnt 1,2,4,…,1281, 2, 4, \ldots, 128.

  2. Primvm bit 1 valens in loco ponderis 32 est: valor accvmvlatvs est 32.

  3. Seqvens, in loco ponderis 8: 32+8=4032 + 8 = 40.

  4. Seqvens, in loco ponderis 4: 40+4=4440 + 4 = 44.

  5. Vltimvm, in loco ponderis 1: 44+1=4544 + 1 = 45. Dispositio 00101101 nvmervm 45 repraesentat.

  6. Qvaterna collecta, bit digitos hexadecimales dant: 0010 est 2 et 1101 est 13, qvi in basi 16 scribitvr d. Ergo 45 in basi 16 scribitvr 2d.

Iter inversvm, a decimali ad binarivm, divisionibvs svccessivis percvrritvr: nvmervs per 2 dividitvr, residvvm (0 vel 1) notatvr, et idem cvm qvotiente repetitvr donec ad 0 pervenitvr; residva, ab vltimo ad primvm lecta, svnt digiti binarii. Pro 45: 45=2⋅22+145 = 2 \cdot 22 + 1, 22=2⋅11+022 = 2 \cdot 11 + 0, 11=2⋅5+111 = 2 \cdot 5 + 1, 5=2⋅2+15 = 2 \cdot 2 + 1, 2=2⋅1+02 = 2 \cdot 1 + 0, 1=2⋅0+11 = 2 \cdot 0 + 1; retro lecta, residva dant 101101, qvod cvm dvabvs cifris ad sinistram est dispositio figvrae. Ratio est qvod qvodqve residvvm est digitvs postremvs nvmeri qvi dividitvr, et qvisqve qvotiens est ille nvmervs vno loco ad dextram translatvs. Eadem methodvs pro qvalibet basi valet: pro basi 16 per 16 dividitvr, et residva a 10 ad 15 litteris a ad f scribvntvr.

Basis 16, sive hexadecimalis, commoditatis cavsa exstat: cvm 16=2416 = 2^4 sit, qvisqve digitvs hexadecimalis exacte qvattvor bit respondet, et octetvs dvobvs digitis scribitvr. Nvmervs 32 bitorvm triginta dvos digitos in binario occvpat, qvi difficile legvntvr, et octo tantvm in hexadecimali, qvi sine calcvlo, digitvs post digitvm, in binarivm convertvntvr. Ideo programmatores memoriam in hexadecimali legvnt. Fvndamentvm mathematicvm systematvm positionalivm in cvrsv Algebra et Geometria I traditvr, in lectione «Systemata nvmerationis positionalis».

C++ integros directe in his basibvs scriptos admittit: litterale qvod a 0b incipit binarivm est, et qvod a 0x incipit, hexadecimale. Intra qvodvis litterale apostrophvs vt separator digitorvm poni potest, qvem compilator neglegit et lector grate accipit: 0b0010'1101, 1'000'000. In exitv, specificatio formae {:b} integrvm in binario scribit, {:x} in hexadecimali litteris minvscvlis et {:X} maivscvlis; signvm # praefixvm anteponit, et latitvdo cvi cifra praecedit cifris ad sinistram complet.

ExemplvmIdem nvmervs, tres scriptvrae
Programma in C++
#include <print>​int main(){    const int decimal{45};    const int binary{0b0010'1101};    const int hexadecimal{0x2d};    std::println("{} {} {}", decimal, binary, hexadecimal);    std::println("binarivs: {:b}", decimal);    std::println("octo bit: {:08b}", decimal);    std::println("hexadecimalis: {:x} {:X} {:#x}", decimal, decimal, decimal);}
Exitvs
45 45 45binarivs: 101101octo bit: 00101101hexadecimalis: 2d 2D 0x2d

Tres variabiles evndem valorem servant, in tribvs basibvs scriptvm, et prima linea exitvs id ostendit: basis est proprietas scriptvrae, non nvmeri. Memoria in tribvs casibvs eandem dispositionem bitorvm servat. Specificatio {:b} cifras ad sinistram omittit; {:08b} octo digitos complet.