Kod uzupełnień do dwóch jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych.

Podobne dokumenty
Kod U2 Opracował: Andrzej Nowak

Zapis liczb binarnych ze znakiem

Wprowadzenie do informatyki - ć wiczenia

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Pracownia Komputerowa wykład V

Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:

Operacje arytmetyczne

Systemy zapisu liczb.

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 2 WSTĘP DO INFORMATYKI

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

Arytmetyka liczb binarnych

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Podstawy Informatyki

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

Wstęp do Informatyki

SYSTEMY LICZBOWE 275,538 =

System liczbowy jest zbiorem reguł określających jednolity sposób zapisu i nazewnictwa liczb.

Pracownia Komputerowa wyk ad V

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

B.B. 2. Sumowanie rozpoczynamy od ostatniej kolumny. Sumujemy cyfry w kolumnie zgodnie z podaną tabelką zapisując wynik pod kreską:

System Liczbowe. Szesnastkowy ( heksadecymalny)

Pracownia Komputerowa wykład VI

Przedmiot: Urządzenia techniki komputerowej Nauczyciel: Mirosław Ruciński

1259 (10) = 1 * * * * 100 = 1 * * * *1

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

Podstawy Informatyki

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

Arytmetyka binarna - wykład 6

Wprowadzenie do informatyki - ć wiczenia

Wprowadzenie do informatyki - ć wiczenia

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci:

1. Operacje logiczne A B A OR B

Arytmetyka stałopozycyjna

Pracownia Komputerowa wykład IV

Naturalny kod binarny (NKB)

Operacje arytmetyczne w systemie dwójkowym

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Wstęp do informatyki- wykład 1 Systemy liczbowe

Cyfrowy zapis informacji

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym

Pracownia Komputerowa wyk ad VI

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Pracownia Komputerowa wyk ad IV

Wstęp do informatyki. Pojęcie liczebności. Zapis liczb. Liczenie bez liczebników. Podstawy arytmetyki komputerowej. Cezary Bolek

Technologie Informacyjne

Metody numeryczne II. Reprezentacja liczb

1.1. Pozycyjne systemy liczbowe

L6.1 Systemy liczenia stosowane w informatyce

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

Architektura komputerów

Informatyka kodowanie liczb. dr hab. inż. Mikołaj Morzy

Wstęp do informatyki. Pojęcie liczebności. Liczenie bez liczebników. Podstawy arytmetyki komputerowej. Cezary Bolek

Wielkości liczbowe. Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Metoda znak-moduł (ZM)

Reprezentacja stałoprzecinkowa. Reprezentacja zmiennoprzecinkowa zapis zmiennoprzecinkowy liczby rzeczywistej

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

MNOŻENIE W SYSTEMACH UZUPEŁNIENIOWYCH PEŁNYCH (algorytm uniwersalny)

Met Me ody numer yczne Wykład ykład Dr inż. Mic hał ha Łan Łan zon Instyt Ins ut Elektr Elektr echn iki echn i Elektrot Elektr echn olo echn

Jednostki informacji. Bajt moŝna podzielić na dwie połówki 4-bitowe nazywane tetradami (ang. nibbles).

Wielkości liczbowe. Wykład z Podstaw Informatyki. Piotr Mika

Kodowanie liczb całkowitych w systemach komputerowych

Techniki multimedialne

Stan wysoki (H) i stan niski (L)

Architektura systemów komputerowych. Poziom układów logicznych. Układy mnoŝące i dzielące

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Technologie Informacyjne Wykład 4

Teoretyczne Podstawy Informatyki

Plan wykładu. Architektura systemów komputerowych. MnoŜenie realizacja sprzętowa (wersja 1) Układy mnoŝące liczby całkowite.

ARCHITEKTURA KOMPUTERÓW Systemy liczbowe

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Znaki w tym systemie odpowiadają następującym liczbom: I=1, V=5, X=10, L=50, C=100, D=500, M=1000

Cyfrowy zapis informacji. 5 grudnia 2013 Wojciech Kucewicz 2

DZIAŁANIA NA UŁAMKACH DZIESIĘTNYCH.

Pozycyjny system liczbowy

RODZAJE INFORMACJI. Informacje analogowe. Informacje cyfrowe. U(t) U(t) Umax. Umax. R=(0,Umax) nieskończony zbiór możliwych wartości. Umax.

Kodowanie informacji. Kody liczbowe

Dodawanie liczb binarnych

Systemy liczbowe używane w technice komputerowej

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

PODSTAWY INFORMATYKI. Informatyka? - definicja

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Adam Korzeniewski p Katedra Systemów Multimedialnych

Operatory AND, OR, NOT, XOR Opracował: Andrzej Nowak Bibliografia:

Systemem liczenia systemach addytywnych !!" Pozycyjny system liczbowy podstawą systemu pozycyjnego

Wstęp do informatyki- wykład 2

LICZBY ZMIENNOPRZECINKOWE

4 Standardy reprezentacji znaków. 5 Przechowywanie danych w pamięci. 6 Literatura

ARYTMETYKA KOMPUTERA

Wprowadzenie do informatyki ćwiczenia

Adam Korzeniewski p Katedra Systemów Multimedialnych

Języki i metodyka programowania. Reprezentacja danych w systemach komputerowych

Technika Cyfrowa i Mikroprocesorowa

SYSTEMY LICZBOWE. SYSTEMY POZYCYJNE: dziesiętny (arabski): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 rzymski: I, II, III, V, C, M

Architektura komputerów

LISTA 1 ZADANIE 1 a) 41 x =5 podnosimy obustronnie do kwadratu i otrzymujemy: 41 x =5 x 5 x przechodzimy na system dziesiętny: 4x 1 1=25 4x =24

Transkrypt:

Kod uzupełnień do dwóch jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych. Jeśli bit znaku przyjmie wartość 0 to liczba jest dodatnia lub posiada wartość 0. Jeśli bit znaku przyjmie wartość 1, to liczba jest ujemna. Procedura wyznaczania liczby przeciwnej w kodzie U2 1. 2. Dokonać negacji wszystkich bitów zapisu liczby U2. Do wyniku dodać 1. Wyznaczyć liczbę przeciwną w kodzie U2 do danej liczby 01101110 (U2). 1. Dokonujemy negacji (zmianę na wartości przeciwne) wszystkich bitów liczby U2: NOT 01101110 10010001 1. Do wyniku negacji dodajemy 1: 10010001 + 00000001 10010010 Liczbą przeciwną do 01101110 (U2) jest 10010010 (U2). Aby się o tym przekonać, obliczmy wartości dziesiętne obu liczb: 01101110 (U2) = 64 + 32 + 8 + 4 + 2 = 110 (10). 10010010 (U2) = (-128) + 16 + 2 = (-128) + 18 = (-110) (10). Zwróć uwagę, iż tym sposobem nie da się otrzymać liczby przeciwnej do najmniejszej liczby ujemnej (bit znaku ustawiony na 1, a wszystkie pozostałe bity równe 0). Na przykład dla 4 bitowego kodu U2 otrzymujemy: (-8) (10) = 1000 (U2) ; NOT(1000) = 0111; 0111 + 0001 = 1000, a to jest ta sama liczba wyjściowa. Sposób 2 procedura wyznaczania liczby przeciwnej w kodzie U2 1. Przejść do pierwszego od prawej strony bitu zapisu liczby. 2. Do wyniku przepisać kolejne bity 0, aż do napotkania bitu o wartości 1, który również przepisać. 3. Wszystkie pozostałe bity przepisać zmieniając ich wartość na przeciwną. Znaleźć liczbę przeciwną w kodzie U2 do danej liczby 1100100010111010111010010100001000000 (U2). Bez paniki, pokażemy w kolejnych krokach, jak to zadanie wykonać:

1. Analizę liczby rozpoczynamy od ostatniej cyfry zapisu liczby. Przesuwamy się w lewą stronę. Do wyniku przepisujemy wszystkie kolejne bity o wartości 0, aż do napotkania bitu 1. Liczba U2 1100100010111010111010010100001000000 Liczba przeciwna U2 000000 1. Napotkany bit 1 również przepisujemy do wyniku bez zmian: Liczba U2 1100100010111010111010010100001000000 Liczba przeciwna U2 1000000 1. Pozostałe bity przepisujemy zmieniając ich stan na przeciwny. To wszystko. Liczba U2 1100100010111010111010010100001000000 Liczba przeciwna U2 0011011101000101000101101011111000000 Również drugi sposób zawodzi przy wyznaczaniu liczby przeciwnej do najmniejszej liczby ujemnej w danym formacie U2. Dlatego na wartość tę należy zwrócić szczególną uwagę. Przeliczanie liczb dziesiętnych na liczby U2 Dla liczb dodatnich nie ma problemu z przeliczaniem na kod U2. Wystarczy znaleźć reprezentację dwójkową danej wartości liczbowej, a następnie uzupełnić ją bitami 0 do długości formatu kodu U2. Wyznaczyć 8-mio bitowy kod U2 dla liczby dziesiętnej 27 (10). 27 (10) = 16 + 8 + 2 + 1 = 11011 (2) = 00011011 (U2). W przypadku wartości ujemnej mamy kilka możliwości postępowania, które opisujemy poniżej.

Zapamiętaj: Sposób 1 przeliczanie ujemnej liczby dziesiętnej na liczbę U2 Liczba ujemna musi mieć ustawiony na 1 bit znaku. Zatem nasze zadanie sprowadza się do znalezienia wartości pozostałych bitów. Bit znaku stoi na pozycji o wadze (-2 n-1 ), n ilość bitów w formacie U2. Pozostałe bity zapisu liczby tworzą naturalny kod dwójkowy. Wartość tego kodu musi być taka, aby po dodaniu jej do wagi pozycji znakowej otrzymać wartość kodowanej liczby. Zapiszmy to w formie równania: kodowana liczba = waga bitu znakowego + wartość kodu pozostałych bitów kodowana liczba = (-2 n-1 ) + wartość kodu pozostałych bitów stąd wartość kodu pozostałych bitów = 2 n-1 + kodowana liczba Po wyznaczeniu wartości tego kodu tworzymy jego zapis w systemie dwójkowym, uzupełniamy w miarę potrzeby bitem 0 do długości formatu U2 1 i dodajemy bit znakowy 1. Konwersja jest gotowa. Wyznaczyć 8-mio bitowy kod U2 dla liczby dziesiętnej (-45) (10). Wyznaczamy moduł wagi pozycji znakowej. Dla n = 8, 2 n-1 = 2 7 = 128 wartość kodu pozostałych bitów = 128 + (-45) = 83 = 1010011 (2) Dodajemy bit znaku równy 1 i otrzymujemy: (-45) (10) = 11010011 (U2). Zapamiętaj: Sposób 2 przeliczanie ujemnej liczby dziesiętnej na liczbę U2 1. Wyznaczamy zapis dwójkowy liczby przeciwnej (czyli dodatniej). 2. Otrzymany kod dwójkowy uzupełniamy w miarę potrzeb do rozmiaru formatu U2. 3. Wyznaczamy liczbę przeciwną za pomocą jednej z opisanych wcześniej metod Wyznaczyć 8-mio bitowy kod U2 dla liczby dziesiętnej (-45) (10). Wyznaczamy kod binarny liczby przeciwnej: 45 (10) = 101101 (2) Kod uzupełniamy dwoma bitami 0 do wymaganej długości 8 bitów: 00101101. Wyznaczamy liczbę przeciwną wg drugiej metody: 00101101 (U2) : 11010011 (U2). Stąd (-45) (10) = 11010011 (U2). Zapamiętaj: Sposób 3 przeliczanie ujemnej liczby dziesiętnej na zapis U2 Jeśli do liczby 2 n (n ilość bitów w formacie U2) dodamy przetwarzaną liczbę dziesiętną, to w wyniku otrzymamy wartość kodu dwójkowego równoważnego bitowo (tzn. o takiej samej postaci) kodowi U2 przetwarzanej liczby. Wynik dodawania wystarczy zapisać w postaci naturalnego kodu dwójkowego i konwersja jest zakończona.

Wyznaczyć 8-mio bitowy kod U2 dla liczby dziesiętnej (-45) (10). 2 8 + (-45) = 256 45 = 211 = 11010011 (2). Stąd (-45) (10) = 11010011 (U2). Zakres n bitowych liczb U2 Największa liczba U2 powstaje dla bitu znaku równego 0, a pozostałych bitów równych 1. Ponieważ pozostałe bity przedstawiają wartość w naturalnym kodzie binarnym i jest ich n-1, to max (U2) = 2 n-1 1 Z kolei najmniejszą wartość liczby U2 otrzymamy dla bitu znaku równego 1, a pozostałych bitów równych 0. W tym przypadku wartość liczby jest równa wadze pozycji znakowej, czyli min (U2) = (-2 n-1 ) Zapamiętaj: Zakres n bitowej liczby w kodzie U2 wynosi Z (U2) = -2 n-1 2 n-1 1 W porównaniu z systemami ZM i U1, zakres liczb U2 jest niesymetryczny liczb ujemnych jest o jedną więcej niż liczb dodatnich. 4 bitowe liczby U2 posiadają zakres: od -2 3 = -8 = 1000 (U2) do 2 3 1 = 7 = 0111 (U2) 8 bitowe liczby U2 posiadają zakres: od -2 7 = -128 = 10000000 (U2) do 2 7 1 = 127 = 01111111 (U2)

16 bitowe liczby U2 posiadają zakres: od -2 15 = -32768 = 1000000000000000 (U2) do 2 15 1 = 32767 = 0111111111111111 (U2) DLA GENIUSZA Stałoprzecinkowe liczby U2 Zapis U2, podobnie jak opisane wcześniej zapisy NBC, ZM i U1, można rozszerzyć do zapisu stałoprzecinkowego dodając bity o wagach ułamkowych równych kolejnym, ujemnym potęgom podstawy 2. Zasada obliczania wartości liczby stałoprzecinkowej U2 w niczym nie różni się od poprzednio opisanych zasad jeśli uważnie przeczytałeś do tego miejsca nasz artykuł, to nie będziesz miał z tym żadnych problemów. Jeśli nie, cóż, informatyka na pewno nie jest dziedziną dla leniwych 0110,1011 (U2) = 2 2 + 2 1 + 2-1 + 2-3 + 2-4 0110,1011 (U2) = 4 + 2 + 1 / 2 + 1 / 8 + 1 / 16 0110,1011 (U2) = 6 11 / 16 1101,0011 (U2) = (-2 3 ) + 2 2 + 2 0 + 2-3 + 2-4 1101,0011 (U2) = (-8) + 4 + 1 + 1 / 8 + 1 / 16 1101,0011 (U2) = (-8) + 5 3 / 16 1101,0011 (U2) = -(2 13 / 16 ) Jeśli chcemy wyznaczyć liczbę przeciwną do danej liczby stałoprzecinkowej w kodzie U2, to stosując pierwszą z opisanych powyżej metod, zamiast 1 do zanegowanych bitów dodajemy liczbę stałoprzecinkową z ustawionym na 1 bitem na najmłodszej pozycji. Obliczamy liczbę przeciwną do 1101,1001 (U2) = (-2 7 / 16 ) NOT 1101,1001 0010,0110 + 0000,0001 0010,0111 = 2 7 / 16 Druga metoda nie wymaga modyfikacji. Idziemy od końca zapisu liczby i przepisujemy wszystkie bity zerowe, aż do napotkania bitu 1. Bit ten przepisujemy bez zmian, a wszystkie pozostałe przepisujemy

ze stanem przeciwnym: Obliczamy liczbę przeciwną do 0001,1100 (U2) = 1 3 / 4 0001,1100 00 100 1110,0100 = -1 3 / 4 Wartość dziesiętną przeliczamy na zapis stałoprzecinkowy U2 wg następujących zasad: 1. Jeśli liczba jest dodatnia, to stosujemy dowolną z opisanych wcześniej metod w celu wyznaczenia jej reprezentacji binarnej. Wynik musimy jednak uzupełnić bitami 0 do długości wybranego formatu U2. Znaleźć zapis U2 liczby 3,125. Zapis U2 posiada 4 bity całkowite i 4 bity ułamkowe: 3 (10) = 11 (2) część całkowita 0,125 (10) = 1 / 8 = 0,001 (2) część ułamkowa Łączymy obie części w całość i uzupełniamy odpowiednio bitami 0 do wymagań formatu U2: 3,125 (10) = 11,001 (2) = 0011,0010 (U2). 1. Jeśli liczba jest ujemna, to jej zapis U2 możemy znaleźć na kilka sposobów. Na przykład można obliczyć zapis binarny liczby przeciwnej do niej (czyli dodatniej), uzupełnić bitami 0, a następnie zamienić otrzymany od U2 na liczbę przeciwną. Jednakże proponuję bardzo prostą metodę, która bezpośrednio pozwala wyznaczyć kod binarny liczby U2. Jeśli zapis U2 posiada n cyfr całkowitych, to liczbę wyjściową sumujemy z wartością 2 n. W wyniku otrzymujemy wartość naturalnego kodu dwójkowego, który bitowo jest równoważny kodowi U2 przeliczanej liczby. Znaleźć zapis U2 liczby -2,125. Zapis U2 posiada 3 bity całkowite oraz 5 bitów ułamkowych. Ponieważ bitów całkowitych jest n=3, to liczbę -2,125 sumujemy z liczbą 2 3 = 8: 8 + (-2,125) = 5,875 = 5 7 / 8 Otrzymana wartość zamieniamy na liczbę w naturalnym kodzie binarnym, po czym uzupełniamy

bitami 0 do specyfikacji formatu U2: 5,875 (10) = 101,111 (2) = 101,11100 Otrzymany kod jest stałoprzecinkowym kodem U2 liczby wyjściowej: -2,125 (10) = 101,11100 (U2). Arytmetyka liczb U2 System zapisu U2 liczb ze znakiem jest dzisiaj powszechnie stosowany we wszystkich komputerach IBM, Amiga, Macintosh i innych, ponieważ jego arytmetyka jest bardzo zbliżona do arytmetyki liczb w naturalnym kodzie binarnym. Dzięki temu procesory mogą wykonywać operacje arytmetyczne na liczbach NBC i U2 za pomocą tych samych układów elektronicznych. A to przekłada się bezpośrednio na pieniążki niższe koszty opracowania i produkcji procesorów. System uzupełnień do podstawy wymyślił znany francuski uczony Blaise Pascal. Otóż skonstruował on prostą maszynę arytmetyczną, która potrafiła dodawać liczby dziesiętne. Aby również umożliwić wykonywanie odejmowania, Pascal dodawał liczby uzupełnione do podstawy 10. Na przykład załóżmy, iż Pascal chciał wykonać odejmowanie 84 55. W tym celu tworzył uzupełnienie dziesiętne liczby 55, które dla liczb dwucyfrowych jest równe (dla 3 cyfrowych odejmujemy od 1000, dla n- cyfrowych odejmujemy od 10 n ) : 100 55 = 45 Otrzymaną liczbę dodawał na swojej maszynie do liczby 84 i dostawał wynik: 84 + 45 = 129 Ignorował najstarszą cyfrę, zatem pozostawało 29, a to jest wynik różnicy: 84 55 = 29 Sprytne, nieprawdaż? Zaletą tego systemu było to, iż uzupełnienie liczby można dosyć łatwo obliczać sprawny rachmistrz może to robić nawet w pamięci. Na tej właśnie podstawie skonstruowany jest system U2 uzupełnienie do podstawy 2. Dodawanie i odejmowanie Liczby U2 dodajemy i odejmujemy wg poznanych zasad dla naturalnego systemu dwójkowego. Przeniesienia poza bit znaku ignorujemy (w rzeczywistości takie przeniesienia lub pożyczki mogą być wykorzystywane przez procesor do dodawania liczb o wielokrotnej precyzji). 0100 0101 11100

+ 0010 + 110 + 11011 0110 1 011 1 10111 4 + 2 = 6 5 + (-2) = 3 (-4) + (-5) = (-9) 011 0101 1100 010 1110 1011 001 1 0111 0001 3 2 = 1 5 (-2) = 7 (-4) (-5) = 1 3 + 3 0011 + 0011 0110 6 Suma i różnica: Mnożenie 5 + (-4) 0101 + 1100 10001 1 (-3) + (-2) 1101 + 1110 11011 (-5) 5 4 0101 0100 0001 1 (-2) 3 1110 0011 1011 (-5) (-7) (-6) 1001 1010 11111 (-1) Mnożenie liczb w kodzie U2 różni się nieco od standardowego mnożenia liczb binarnych. Przed wykonaniem tej operacji arytmetycznej musimy rozszerzyć znakowo obie mnożone liczby tak, aby ich długość (liczba bitów) wzrosła dwukrotnie (jeśli są różnej długości, to rozszerzamy znakowo względem dłuższej liczby). Rozszerzenie znakowe polega na powielaniu bitu znaku na wszystkie dodane bity. Np.: 0111 (U2) = 0000 0111 (U2) rozszerzyliśmy znakowo liczbę 4 bitową do 8 bitowej 1011 (U2) = 1111 1011 (U2) to samo dla liczby ujemnej. Rozszerzenie znakowe nie zmienia wartości liczby w kodzie U2. Po wykonaniu rozszerzenia znakowego liczby mnożymy standardowo. Pomnóżmy (-2) 3: -2 = 1110 (U2) = 1111 1110 (U2) 3 = 0011 (U2) = 0000 0011 (U2) (-2) 3 11111110 x 00000011 011111110 + 111111100

1011111010-6 Wynik mnożenia może być liczbą o długości równej sumie długości mnożonych liczb. Dlatego bity wykraczające w naszym przykładzie poza 8 bitów ignorujemy. Pozostałe 8 bitów określa w kodzie U2 liczbę -6. Zatem rachunek zgadza się. Dzielenie Najprostszym rozwiązaniem jest zapamiętanie znaków dzielonych liczb, zamiana ich na liczby dodatnie, dokonanie dzielenia dla liczb naturalnych, a następnie zmiana znaku wyniku, jeśli znaki dzielnej i dzielnika różnią się. Podzielmy 6 przez -3: 6 = 0110 (U2) -3 = 1101 (U2) zmieniamy na 3 = 0011 (U2) Dzielimy liczbę 0110 przez 0011 10 0110 : 0011 0110 0000 Otrzymaliśmy wynik 0010 (liczba 2). Ponieważ znaki dzielnej i dzielnika są różne, zmieniamy wartość na przeciwną: 1110 i ostatecznie otrzymujemy wynik 1110 (U2) = (-2). Jeśli w trakcie dzielenia otrzymamy resztę, to musi ona mieć ten sam znak, co dzielna. Zbierzmy i podsumujmy reguły określania znaków wyniku i reszty z dzielenia w poniższej tabelce. Zawiera ona stan bitów znakowych. Reguły znaków przy dzieleniu liczb całkowitych Dzielna Dzielnik Wynik Reszta 0 0 0 0 0 1 1 0 1 0 1 1 1 1 0 1 Nadmiar i niedomiar w kodzie U2 W trakcie wykonywania działań arytmetycznych wynik operacji może przekroczyć dozwolony zakres

liczb zarówno powyżej górnej granicy (nadmiar) jak i poniżej dolnej (niedomiar). Cechą charakterystyczną nadmiaru/niedomiaru jest zmiana znaku wyniku w sytuacji, gdy nie powinna ona nastąpić. Załóżmy, iż operujemy na 4 bitowych liczbach w kodzie U2 i chcemy wykonać proste dodawanie: 0 111 + 0 001 7 + 1 1 000-8 Otrzymany wynik jest niepoprawny w tym kodzie. Spowodowane to jest tym, iż liczba 8 będąca sumą 7 i 1 wykracza poza górny zakres wartości 4 bitowego kodu U2 (równy 7) i nie można jej poprawnie przedstawić musielibyśmy przeznaczyć na zapis liczby więcej bitów. Podobną sytuację zastaniemy przy próbie dodania dwóch liczb ujemnych, np. -6 i -3: 1 010 + 1 101-6 + -3 10 111 7 Liczba -9 jest mniejsza od dolnego krańca 4 bitowych liczb w kodzie U2 (równego -8) i z tego powodu nie może być poprawnie przedstawiona w tym kodzie. Zapamiętaj: Wystąpienie nadmiaru lub niedomiaru jest wskazówką dla programisty, iż źle dobrał typ danych dla przetwarzanej informacji liczby są reprezentowane zbyt małą ilością bitów i nie można poprawnie zapisywać wyniku operacji. Najprostszym rozwiązaniem będzie zwiększenie długości formatu U2 (np. z 16 bitów na 32 bity). W poniższej tabelce zebraliśmy reguły powstawania nadmiaru i niedomiaru przy różnych operacjach arytmetycznych na liczbach w kodzie U2. Zawiera ona stany bitów znakowych. Reguły powstawania nadmiaru/niedomiaru w kodzie U2 Operacja Pierwszy argument Drugi argument Wynik DODAWANIE ODEJMOWANIE 0 0 1 1 1 0 0 1 1 1 0 0

0 0 1 MNOŻENIE DZIELENIE 1 1 1 0 1 0 1 0 0 Zadania Zadanie 1 (łatwe) Oblicz wartość dziesiętną podanych liczb w kodzie U2 10000001 (U2) = (10) Testuj. 11000000 (U2) = (10) Testuj. 01111111 (U2) = (10) Testuj. Czyść 11111111 (U2) = (10) Testuj. 11110001 (U2) = (10) Testuj. Zadanie 2 (łatwe) Przelicz podane liczby dziesiętne na ich zapis w 8-mio bitowym kodzie U2 100 (10) = (U2) Testuj. -115 (10) = (U2) Testuj. -126 (10) = (U2) Testuj. Czyść 72 (10) = (U2) Testuj. -44 (10) = (U2) Testuj. Zadanie 3 (łatwe) Wykonaj podane działania arytmetyczne na liczbach w kodzie U2

0111 (U2) + 1000 (U2) = (U2) Testuj. 1111 (U2) + 1111 (U2) = (U2) Testuj. 0100 (U2) 1110 (U2) = (U2) Testuj. Czyść 1011 (U2) 0011 (U2) = (U2) Testuj. 1000 (U2) 1001 (U2) = (U2) Testuj. Zadanie 4 (średnie) Udowodnij, że znakowe rozszerzenie liczby w kodzie U2 nie zmienia jej wartości. Zadanie 5 (średnie) Oblicz zakres liczb U2 w kodzie stałoprzecinkowym o 8 bitach całkowitych i 8 ułamkowych. Zadanie 6 (średnie) 8-mio bitowe liczby U2 kodujemy ósemkowo wg reguł dla kodu binarnego. Podaj prostą regułę, która z postaci zapisu ósemkowego pozwoli szybko zorientować się, czy mamy do czynienia z liczbą dodatnią, czy też ujemną.