PRIPO Principy počítačů 20.10. – cvičení č. 5 Odčítání v binární soustavě Doplňkový kód Procvičení převodů mezi soustavami Martin Adámek
Organizační drobnosti docházka PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT)
Připomenutí: Sčítání ve dvojkové soustavě Úplně stejně jako desítkové při písemném sčítání pod sebou jasné&názorné Jen máme k dispozici jen dvě číslice jsme nuceni dříve použít vyšší řád PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT)
Záporná čísla v přímém kódu 0 0000 +0 1 0000 -0 0 0001 +1 1 0001 -1 0 0010 +2 1 0010 -2 0 0011 +3 1 0011 -3 0 0100 +4 1 0100 -4 0 0101 +5 1 0101 -5 0 0110 1 0110 0 0111 1 0111 0 1000 1 1000 0 1001 1 1001 0 1010 1 1010 0 1011 1 1011 0 1100 1 1100 0 1101 1 1101 0 1110 +14 1 1110 -14 0 1111 +15 1 1111 -15 Přidán zvláštní znaménkový bit 0 ~ + 1 ~ - most-significant bit (MSB) Nula redundantně zabírá dvě číselné kombinace 8 bitů: MSB=0: 0 až 127 MSB=1: -127 až -0 celkový rozsah: -127..+127 (místo 0 až 255 u přirozených čísel) (tabulka převzata z přednášky) PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT)
Binární záporná čísla obecně vždy musíme vědět, kolikabitový je kód kolik řádů/bitů máme k dispozici => který bit je znaménkový (MSB) např. v přímém kódu 1+3 bity: 1 101(2) = -5(10) 1+4 bity: 0 1101(2) = +13(10) stejně (+13d) i pro 1+5, 1+6, ... bitů nebo pro 0+4 bity PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT)
PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT) Odčítání – přímý kód jako v desítkové odečte se po řádech zprava při odečítání „0-1“ se vypůjčí „1“ zleva odečítá se menší od většího, při záměně menšence a menšitele se změní znaménkový bit 26-9=17 26(10)=16+8+0+2+0(10)=11010(2) 9(10)=8+0+0+1(10)=1001(2) 11010-01001=10001(2) 1101-0101; 1011-1001; 1001-0011; 1000-0011 odčítání více čísel ? postupně; nebo nejdříve všechny menšitele sečíst PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT)
PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT) Inverzní kód jako přímý, jen záporná čísla jsou inverzí kladného čísla (logická negace bit po bitu) +5(10)=0 101(2) -5(10)=1 010(2) rozsah jako u přímého (nula dvakrát), jen jiná záporná čísla PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT)
Doplňkový kód (dvojkový doplněk) kladná čísla jsou v něm stejně jako v přímém (nebo inverzním) kódu záporná číslo jako v inverzním, ale navíc se přičítá „1“ =>nula jen jednou => -1 + 1 = 0 => -1 + 2 = 1 funguje matematika jediný reálně využívaný kód pro práci se zápornými čísly navíc se rozsah datového typu zvýší o 1 (v záporné oblasti) PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT)
Doplňkový kód příklady pro 1+4bity -3(10): +3(10)=0 0011(2) -3(10)=1 1100(2) + 1 -3(10)=1 1101(2) +15(10): +15(10)=0 1111(2) -16(10): -15(10)=1 0001(2) -16(10)=1 0000(2) přetečení: 15(10)+1=? 0 1111(2)+1=1 0000(2) 1 0000(2)=-16(10) 15(10)+1=-16(10) => rozsah -16 až +15 -3(10): přímý kód: 1 0011 inverzní kód: 1 1100 doplňkový kód: 1 1101 PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT)
Přetečení (registru, paměti) situace, kdy je snaha o přenos do neexistujícího bitu (nestačí bity/řády) maximum+1 = minimum platí i u datových typů pro kladná čísla: 1111 + 1 = 10000 ale při 4 bitech se zapíše jen 0000 PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT)
PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT) Doplňkový kód – rozsah nula jen jednou => rozsah o 1 větší než u přím.a in. +0: 0 0000 -0: 1 1111 + 1 = 0 0000 jazyk Pascal – některé datové typy Shortint: -128..+127 (8b: 1MSB, zbyde 7; 27=128; -128 až -1 a 0 až 127) 127+1 = -128 – přetečení Byte: 0..+255 (8b) Word: 0..65535 (16b) Integer: -32768..+32767 (16b) dříve se datové typy volily odpovědně, snahou byla nenáročnost programu na RAM „640KB musí stačit každému“ – autor výroku = ? Bill Gates o základní paměti v OS MS-DOS pro přístup do zbytku RAM (např. 8MB, 32MB) složitější postup dnes např. 2GB, 4GB RAM PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT)
„Odčítání“ s doplňkovým kódem 8-6=2 8-6 = 8 + (-6) 8(10) = 0 1000(2) 6(10) = 0 0110(2) -6(10) = 1 1001(2) + 1 = 1 1010 (2) 0 1000 + 1 1010 = 0 0010 (2) = 2 počítač odčítání obejde sčítáním ! a nejen on ! (a nejen odčítání) sčítání je snazší než odčítání PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT)
PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT) Procvičit si převody mezi číselnými soustavami (cv. 4) doplňkový kód (cv. 5) výpočet Un a In v sérioparalelním zapojení rezistorů (cv. 2-3) PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT)
PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT) Příště Procvičení probraných témat Přespříště logické funkce úvod do Booleovy algebry PRIPO, cvičení – Ing. Martin Adámek (UHK-FIM-KIT)