Odejmowanie liczb w systemie binarnym - zły wynik działania
-
- Użytkownik
- Posty: 24
- Rejestracja: 10 sty 2010, o 17:19
- Płeć: Mężczyzna
- Podziękował: 3 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Witam,
Uczę się z książki "Podręcznik do nauki zawodu Technik Informatyk: Urządzenia Techniki Komputerowej wyd. z roku 2011" i jestem w temacie 3.2.2 "Odejmowanie liczb binarnych".
Dwa przykłady w tekście zrozumiałem, ale przykładu wymyślonego przeze mnie nie byłem w stanie rozwiązać.
Oto on:
\(\displaystyle{ \ \ \ \ 1010010011_{B}\\- \ \underline{1101011010_{B}}}\)
Obliczyłem już, że \(\displaystyle{ 1010010011_{B}=659}\) a \(\displaystyle{ 1101011010_{B}=858}\), natomiast wynikiem odejmowania \(\displaystyle{ 659-858=-199}\) a wg. konwersji na system binarny, \(\displaystyle{ -199}\) to binarne \(\displaystyle{ 10011000111_{ZM}}\) ale podczas odejmowania binarnego "pod kreską" wychodzi mi zupełnie co innego (w tym wypadku "pożyczam" jedynki dla reszty zer).
Moim problemem jest niecałkowite zrozumienie zasad odejmowania binarnego - chodzi o proces pożyczania.
Gdy pożyczam te pogrubione jedynki na rzecz zer znajdujących się za nimi, tak jak robi się to w przypadku odejmowania "pod kreską" liczb w systemie dziesiętnym (gdy w jednej kolumnie od mniejszej liczby odejmuje się większą, wtedy z następnej kolumny "pożycza się" liczbę), wychodzi to:
\(\displaystyle{ \ \ \ \ 10\textbf{1}00\textbf{1}0011_{B}\\- \ \underline{1101011010_{B}} \\ \phantom{.} \ \ \ 1010100101_{B}}\)
Niestety \(\displaystyle{ 1010100101_{B}}\) to decymalne \(\displaystyle{ 677}\)
[Tam wyżej wstawiłem kropkę, żeby wynik działania się nie rozłaził.]
Czy jest mi ktoś w stanie wytłumaczyć odejmowanie binarne, także na jakichś trudniejszych przykładach? W artykule na wiki przykład pożyczania jedynek jest banalny, ja potrzebuję trochę bardziej złożonych, podobnych do mojego. W mojej książce też nie ma trudniejszych, a nie widzę żeby było wytłumaczone jak postępować w takich przypadkach.
Dziękuję
Uczę się z książki "Podręcznik do nauki zawodu Technik Informatyk: Urządzenia Techniki Komputerowej wyd. z roku 2011" i jestem w temacie 3.2.2 "Odejmowanie liczb binarnych".
Dwa przykłady w tekście zrozumiałem, ale przykładu wymyślonego przeze mnie nie byłem w stanie rozwiązać.
Oto on:
\(\displaystyle{ \ \ \ \ 1010010011_{B}\\- \ \underline{1101011010_{B}}}\)
Obliczyłem już, że \(\displaystyle{ 1010010011_{B}=659}\) a \(\displaystyle{ 1101011010_{B}=858}\), natomiast wynikiem odejmowania \(\displaystyle{ 659-858=-199}\) a wg. konwersji na system binarny, \(\displaystyle{ -199}\) to binarne \(\displaystyle{ 10011000111_{ZM}}\) ale podczas odejmowania binarnego "pod kreską" wychodzi mi zupełnie co innego (w tym wypadku "pożyczam" jedynki dla reszty zer).
Moim problemem jest niecałkowite zrozumienie zasad odejmowania binarnego - chodzi o proces pożyczania.
Gdy pożyczam te pogrubione jedynki na rzecz zer znajdujących się za nimi, tak jak robi się to w przypadku odejmowania "pod kreską" liczb w systemie dziesiętnym (gdy w jednej kolumnie od mniejszej liczby odejmuje się większą, wtedy z następnej kolumny "pożycza się" liczbę), wychodzi to:
\(\displaystyle{ \ \ \ \ 10\textbf{1}00\textbf{1}0011_{B}\\- \ \underline{1101011010_{B}} \\ \phantom{.} \ \ \ 1010100101_{B}}\)
Niestety \(\displaystyle{ 1010100101_{B}}\) to decymalne \(\displaystyle{ 677}\)
[Tam wyżej wstawiłem kropkę, żeby wynik działania się nie rozłaził.]
Czy jest mi ktoś w stanie wytłumaczyć odejmowanie binarne, także na jakichś trudniejszych przykładach? W artykule na wiki przykład pożyczania jedynek jest banalny, ja potrzebuję trochę bardziej złożonych, podobnych do mojego. W mojej książce też nie ma trudniejszych, a nie widzę żeby było wytłumaczone jak postępować w takich przypadkach.
Dziękuję
Ostatnio zmieniony 31 gru 2011, o 12:05 przez szczypmen, łącznie zmieniany 1 raz.
-
- Użytkownik
- Posty: 2911
- Rejestracja: 1 maja 2006, o 21:13
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Pomógł: 623 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Zastosujemy zasadę dodawania liczby przeciwnej.
Liczbę na przeciwną zamieniamy w następujący sposób:
1. Dodajemy na początku jedno zero (bit znaku)
1. Dokonujemy inwersji bitów
2. Wynik zwiększamy o \(\displaystyle{ 1}\)
po inwersji:
\(\displaystyle{ 10010100101}\) (pierwszy bit z lewej, to bit znaku)
i po dodaniu \(\displaystyle{ 1}\):
\(\displaystyle{ 10010100110}\)
i teraz 'zwykłe' dodawanie:
\(\displaystyle{ 01010010011 \\ \underline
{10010100110} \\
11100111001}\) (jedynka na początku oznacza, że mamy liczbę ujemną)
Dekodujemy:
zmniejszamy o \(\displaystyle{ 1}\):
\(\displaystyle{ 11100111000}\)
i dokonujemy inwersji
\(\displaystyle{ 00011000111}\)
Uwzględniamy to, że przed inwersją na początku była jedynka, czyli mamy de facto liczbę ujemną
Liczbę na przeciwną zamieniamy w następujący sposób:
1. Dodajemy na początku jedno zero (bit znaku)
1. Dokonujemy inwersji bitów
2. Wynik zwiększamy o \(\displaystyle{ 1}\)
po inwersji:
\(\displaystyle{ 10010100101}\) (pierwszy bit z lewej, to bit znaku)
i po dodaniu \(\displaystyle{ 1}\):
\(\displaystyle{ 10010100110}\)
i teraz 'zwykłe' dodawanie:
\(\displaystyle{ 01010010011 \\ \underline
{10010100110} \\
11100111001}\) (jedynka na początku oznacza, że mamy liczbę ujemną)
Dekodujemy:
zmniejszamy o \(\displaystyle{ 1}\):
\(\displaystyle{ 11100111000}\)
i dokonujemy inwersji
\(\displaystyle{ 00011000111}\)
Uwzględniamy to, że przed inwersją na początku była jedynka, czyli mamy de facto liczbę ujemną
-
- Użytkownik
- Posty: 24
- Rejestracja: 10 sty 2010, o 17:19
- Płeć: Mężczyzna
- Podziękował: 3 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Dzięki za odpowiedź, ale po co robisz inwersję i zwiększasz wynik o jeden? Bez tego zabiegu nie otrzyma się poprawnego wyniku? Nie istnieje prostszy sposób, bez żadnych dodatkowych manipulacji?
Ostatnio zmieniony 31 gru 2011, o 12:15 przez Anonymous, łącznie zmieniany 1 raz.
Powód: Nie cytuj całego poprzedniego posta.
Powód: Nie cytuj całego poprzedniego posta.
-
- Użytkownik
- Posty: 2911
- Rejestracja: 1 maja 2006, o 21:13
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Pomógł: 623 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Ten sposób stosujesz, odejmując liczbę większą od mniejszej. Jest inny sposób tzw. dopełnienie do 1, ale tam również robi się inwersję.
Możesz oczywiście odejmować tak:
\(\displaystyle{ 659 - 858 = - (858 - 659)}\)
tzn. zamienić miejscami liczby przy odejmowaniu, pamiętając, że wynik ma być ujemny. Czy to jest jednak lepszy sposób?
Możesz oczywiście odejmować tak:
\(\displaystyle{ 659 - 858 = - (858 - 659)}\)
tzn. zamienić miejscami liczby przy odejmowaniu, pamiętając, że wynik ma być ujemny. Czy to jest jednak lepszy sposób?
-
- Użytkownik
- Posty: 24
- Rejestracja: 10 sty 2010, o 17:19
- Płeć: Mężczyzna
- Podziękował: 3 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Czyli mam rozumieć, że podczas stosowania zasady dodawania liczby przeciwnej, w działaniach na liczbach binarnych, zawsze do liczby mniejszej dodaję bit znaku adekwatny do wartości liczby (czyli 0 jeśli dodatnia a 1 jeśli ujemna) i tylko do liczby mniejszej, a inwersję przeprowadzam zawsze, tylko na liczbie większej, zwiększając ją następnie o \(\displaystyle{ 1_{B}}\), tak?
Czy są jakieś odstępstwa od reguły?
Czy są jakieś odstępstwa od reguły?
-
- Użytkownik
- Posty: 2911
- Rejestracja: 1 maja 2006, o 21:13
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Pomógł: 623 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Inwersję przeprowadzasz przy zamianie liczby na przeciwną. Bez względu na to, czy jest odjemną, czy odjemnikiem.
W przykładzie poniżej obie liczby są ujemne:
\(\displaystyle{ P = -3 + (- 7) \\
(1)1101 + (1)1001 = 1(1)0110}\)
w nawiasach są bity znaku
nadmiarową jedynkę (przed bitem znaku) w wyniku odrzucasz
W przykładzie poniżej obie liczby są ujemne:
\(\displaystyle{ P = -3 + (- 7) \\
(1)1101 + (1)1001 = 1(1)0110}\)
w nawiasach są bity znaku
nadmiarową jedynkę (przed bitem znaku) w wyniku odrzucasz
-
- Użytkownik
- Posty: 24
- Rejestracja: 10 sty 2010, o 17:19
- Płeć: Mężczyzna
- Podziękował: 3 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Btw. dzięki Ci za pomoc
Bo widzę że w pierwszej Twojej odpowiedzi, inwersji poddałeś tylko \(\displaystyle{ 1101011010_{B}}\) czyli \(\displaystyle{ 858}\), a potem dodałeś bit znaku, natomiast do \(\displaystyle{ 1010010011_{B}}\) czyli \(\displaystyle{ 659}\), dodałeś tylko bit znaku. To mnie zastanawiało.
Czyli mogę sobie sam wybrać, czy chcę przeprowadzić inwersję na liczbie mniejszej czy większej? I tak wynik powinien być prawidłowy?aalmond pisze:Inwersję przeprowadzasz przy zamianie liczby na przeciwną. Bez względu na to, czy jest odjemną, czy odjemnikiem.
Bo widzę że w pierwszej Twojej odpowiedzi, inwersji poddałeś tylko \(\displaystyle{ 1101011010_{B}}\) czyli \(\displaystyle{ 858}\), a potem dodałeś bit znaku, natomiast do \(\displaystyle{ 1010010011_{B}}\) czyli \(\displaystyle{ 659}\), dodałeś tylko bit znaku. To mnie zastanawiało.
-
- Użytkownik
- Posty: 2911
- Rejestracja: 1 maja 2006, o 21:13
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Pomógł: 623 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Nie do końca. Nie dokonujemy inwersji na liczbie dodatniej.Czyli mogę sobie sam wybrać, czy chcę przeprowadzić inwersję na liczbie mniejszej czy większej?
W Twoim przykładzie jest:
\(\displaystyle{ 659 - 858 = 659 + (-858)}\)
a więc inwersja jest tylko na drugiej liczbie i oczywiście na wyniku, który też jest ujemny
-
- Użytkownik
- Posty: 24
- Rejestracja: 10 sty 2010, o 17:19
- Płeć: Mężczyzna
- Podziękował: 3 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Czyli inwersję zawsze robi się tylko na liczbie ujemnej oraz na wyniku, który otrzymaliśmy z działania na liczbach, z których chociaż jedna też przeszła inwersję. No i po wszystkim do zdekodowanego wyniku (czyli tego, który przeszedł ponowną, obowiązkową inwersję) dodajemy bit znaku i voilà, mamy prawidłowy wynik. Tak?aalmond pisze:a więc inwersja jest tylko na drugiej liczbie i oczywiście na wyniku, który też jest ujemny
-
- Użytkownik
- Posty: 2911
- Rejestracja: 1 maja 2006, o 21:13
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Pomógł: 623 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
tylko, jeżeli wynik jest ujemnyoraz na wyniku, który otrzymaliśmy z działania na liczbach
bit znaku jest już ustawionydodajemy bit znaku
-
- Użytkownik
- Posty: 24
- Rejestracja: 10 sty 2010, o 17:19
- Płeć: Mężczyzna
- Podziękował: 3 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Czyli inwersję zawsze robi się tylko na liczbie ujemnej oraz na wyniku - jeżeli wynik jest ujemny - który otrzymaliśmy z działania na liczbach, z których chociaż jedna też przeszła inwersję.
Jeśli wynik jest ujemny, musi przejść obowiązkową inwersję (jak powiedziano wyżej), co daje ostatecznie zdekodowaną wartość-wynik.
Jeśli wynik jest ujemny, musi przejść obowiązkową inwersję (jak powiedziano wyżej), co daje ostatecznie zdekodowaną wartość-wynik.
-
- Użytkownik
- Posty: 2911
- Rejestracja: 1 maja 2006, o 21:13
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Pomógł: 623 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Jeżeli żadna liczba nie przechodzi inwersja, to znaczy, że wynik na pewno będzie dodatni i nie potrzebuje inwersji.z których chociaż jedna też przeszła inwersję
Tak. A jeżeli wynik jest dodatni, podany jest wprost.Jeśli wynik jest ujemny, musi przejść obowiązkową inwersję, co daje ostatecznie zdekodowaną wartość-wynik.
Przykład:
\(\displaystyle{ P = - 3 + 9 \\
(1)1101 + (0)1001 = 1(0)0110}\)
-
- Użytkownik
- Posty: 24
- Rejestracja: 10 sty 2010, o 17:19
- Płeć: Mężczyzna
- Podziękował: 3 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Mam pytanie: dlaczego w wyniku (w tym przykładzie) bit znaku nie jest pisany na samym końcu wyniku, czyli jako ostatni bit w wyniku:aalmond pisze:Tak. A jeżeli wynik jest dodatni, podany jest wprost.Jeśli wynik jest ujemny, musi przejść obowiązkową inwersję, co daje ostatecznie zdekodowaną wartość-wynik.
Przykład:
\(\displaystyle{ P = - 3 + 9 \\
(1)1101 + (0)1001 = 1(0)0110}\)
\(\displaystyle{ P = - 3 + 9 \\
(1)1101 + (0)1001 = \textbf{(0)1}0110}\)
Tak wygląda lepiej, ale pewnie nie jest poprawne - jeśli nie jest, to dlaczego?
-
- Użytkownik
- Posty: 2911
- Rejestracja: 1 maja 2006, o 21:13
- Płeć: Mężczyzna
- Lokalizacja: Kraków
- Pomógł: 623 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Nie jest dobrze. Twój wynik, to \(\displaystyle{ 22}\).Tak wygląda lepiej, ale pewnie nie jest poprawne
Już to mówiłem, ale powtórzę:
nadmiarową jedynkę (przed bitem znaku) w wyniku odrzucasz, czyli wynik jest taki:
\(\displaystyle{ (0)0110}\) (dziesiętna szóstka) - bit znaku to zero, więc liczba jest dodatnia
-
- Użytkownik
- Posty: 24
- Rejestracja: 10 sty 2010, o 17:19
- Płeć: Mężczyzna
- Podziękował: 3 razy
Odejmowanie liczb w systemie binarnym - zły wynik działania
Ok, dzięki za pomoc. Bardzo dziękuję i pozdrawiam. Wszystkiego Najlepszego i Dużo Zdrowia w Nowym Roku