[Algorytmy] Odejmowanie liczb binarnych

nwa2pac
Użytkownik
Użytkownik
Posty: 147
Rejestracja: 3 maja 2010, o 20:11
Płeć: Mężczyzna
Podziękował: 27 razy
Pomógł: 3 razy

[Algorytmy] Odejmowanie liczb binarnych

Post autor: nwa2pac »

Mam problem z takim odejmowaniem liczb w systemie dwójkowym :

\(\displaystyle{ 1000
- 111}\)
nie wiem co zrobić z pierwszą cyfrą gdyż nie mogę zrealizować pożyczki bo na drugiej i trzeciej pozycji są zera .
Ostatnio zmieniony 12 paź 2011, o 20:50 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
Awatar użytkownika
Mistrz
Użytkownik
Użytkownik
Posty: 637
Rejestracja: 10 sie 2009, o 09:56
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz / Warszawa
Podziękował: 19 razy
Pomógł: 135 razy

[Algorytmy] Odejmowanie liczb binarnych

Post autor: Mistrz »

No ale przecież na czwartej pozycji jest jedynka i możesz pożyczyć. \(\displaystyle{ 1000 - 111 = 1}\).
El_Konrad
Użytkownik
Użytkownik
Posty: 168
Rejestracja: 4 paź 2011, o 17:32
Płeć: Mężczyzna
Podziękował: 55 razy
Pomógł: 7 razy

[Algorytmy] Odejmowanie liczb binarnych

Post autor: El_Konrad »

Odejmowanie w systemie dwójkowym dla początkujących jest zapewne kłopotliwe... Podejrzewam, że wasz nauczyciel od informatyki nie stosuje sposobu takiego jak ja (odpowiesz sobie samemu jak się z nim zapoznasz...)
Otóż odejmowanie można robić na dwa sposoby (może są i inne ale znam tylko te i to mi wystarczy):
- odejmowanie z tzw. pożyczkami
- odejmowanie z zamianą liczby na przeciwną (ten wytłumaczę, chociaż spróbuję ;) )

Będzie to na twoim przykładzie.
1000
- 111
Z liczbą 1000 nic nie robimy, ale liczba 111 to będzie nasz cel :) !

Do 111 dopisujemy na początku 0 aby było po 4 cyferki w każdej z dwóch liczb, czyli 111 --> 0111.
0111 - zamieniamy na liczbę przeciwną (to jest główna najważniejsza rzecz!), czyli 0111 --> 1001
Dlaczego 1001 ? Wiadomo, że liczbą przeciwną w dwójkowym dla 1 jest 0 , a dla 0 jest 1.
Liczbę zamieniamy od prawej strony do lewej i zamianę zaczynamy dopiero jak spotkamy jedynkę znaczy się zaczynamy zamianę po napotkanej jedynce (mam nadzieję, że rozumiesz jak na razie :D), np. poćwiczymy zamianę:
011100 --> (liczba przeciwna) 100100
1101010 --> 0010110

Jak zamienimy tą drugą liczbę na przeciwną to dodajemy pierwszą + drugą ...

Kontynuując przykład:
1000
+ 1001
= 0001 // analogicznie powinno być 10001, ale jak jedynka nam przechodzi (tak jest tylko przy ostatnim dodawaniu dodajemy przecież od prawej do lewej) to jej już nie przepisujemy...

Rozwiązanie z pożyczkami:
1000
- 0111
= 0001

Rozwiązanie z liczbą przeciwną:
1000
+ 1001
= 0001


Jakiś przykład:

100110011
- 011011111

zamieniamy: 011011111 --> 100100001

100110011
+ 100100001
= 001010100 // pogrubiłem 0... powinno być 10 , ale powtarzam tą 'przechodzącą' jedynkę się opuszcza !

Mnie też tego nie nauczyli w szkole... ale informatyka mnie kręci więc uczę się samemu :P

Pozdrawiam, Konrad
Ostatnio zmieniony 12 paź 2011, o 20:49 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
ODPOWIEDZ