6: Heiltölureikningur Flashcards
Stýfing (truncation)
Minnka plássið, breyta stærri tölum yfir í tölu með færri bita
Formerkisvíkkun (sign extension)
Stækka plássið, breyta minni tölum yfir í tölu með fleiri bita
Formerkisvíkkun (sign extension)
Bæta fyrstu tölunni framan á :
001 verður 0001
110 verður 1110
Stýfing (truncation)
Minnka plássið, breyta stærri tölum yfir í tölu með færri bita
Stýfing (truncation)
Ekki alltaf hægt að klippa bara fyrstu töluna af, maður getur endað með annað gildi.
Yfirflæði/Undirflæði
Helstu reglur :
Víkkun (t.d., short int yfir í int)
– Án formerkis: Bætum við núllum
– Með formerki: Formerkisvíkkun (efsti biti afritaður)
– Báðar útgáfur gera það sem við búumst við
Helstu reglur :
Stýfing (t.d., unsigned yfir í unsigned short)
– Með/án formerkis: efstu bitum er hent
– Útkoman túlkuð uppá nýtt
– Án formerkis: Virkar eins og mod aðgerð
– Með formerki: Virkar svipað og mod
– Virkar eins og við búumst við fyrir litlar tölur
Samlagning án formerkis
Venjulegt samlagningarfall
– Hendir geymdum bitum (carry)
Yfirflæði:
Vefst í hring (wraps)
– Ef summan er ≥ 2^w
Tvíandhverfusamlagning
TAdd og UAdd hafa sömu hegðun séð frá bitunum
Efsti biti og carry biti eru eins þá?
Erum við í góðum málum
Efsti biti og carry biti eru ekki eins þá?
Yfirflæði
Yfirflæði í TAdd
Virkni:
– Rétt summa þarf w+1
bita
– Hendum efsta bitanum
(MSB)
– Meðhöndlum hina w
bitana sem tvíandhverfu
heiltölu
Of stór mínustala verður ?
jákvæð tala
Einkenni TAdd
Virkni
– Rétt summa þarf w+1 bita
– Hendum efsta bitanum
(MSB)
– Meðhöndlum hina w bitana
sem tvíandhverfu heiltölu
Margföldun með hliðrun
Hliðrun og samlagning eru hraðvirkari en margföldun
u «_space;k skilar u * 2^k
Neitun: Fylling (complement) & Hækkun
Neitun með fyllingu (~) og upphækkun (+1)
gildir fyrir allar tölur nema TMin
Deiling með hliðrun (signed)
Deiling tölu með formerki með heilu veldi af 2
– x»_space; k skilar x / 2^k
Deiling með hliðrun (unsigned)
Deiling tölu án formerkis með heilu veldi af 2 x»_space; k skilar x / 2^k
Notar rökræna hliðrun
Deiling með hliðrun (signed)
Deiling tölu með formerki með heilu veldi af 2
x»_space; k skilar x / 2^k
Notar reiknihliðrun
Rúnnar í ranga átt þegar u < 0
Rétt deiling með hliðrun
Deiling neikvæðrar tölu með heilu veldi af 2
Bætum bjögun við áður en við hliðrum
Viljum x / 2^k (rúnnað að 0)
– Reiknum (x+2^k-1)/ 2^k
Af hverju ætti ég að nota unsigned?
Ekki nota unsigned, án þess að skilja mögulegar afleiðingar
Auðvelt að gera mistök
Getur verið mjög lúmskt
Hvenær ætti að nota unsigned?
Þegar unnið er með mátreikning (modular)
– Reikningur með mörgum tölustöfum
Þegar bitar notaðir til að tákna mengi
– Rökræn hægri hliðrun, engin formerkisvíkkun
Í kerfisforritun (systems programming)
– Bitasíun, tækjastýring, …
Sum föll í C skila unsigned niðurstöðum
– sizeof(), strlen(), …