1. Podaj algorytm konwersji zapisu liczby naturalnej w systemie o podstawie p na zapis w systemie o podstawie q, gdzie p,q ∈ 2,3,.... 2. Określ warunki na to, aby liczba wymierna zapisana w systemie o podstawie p w postaci skończonego rozwinięcia dała się przedstawić w systemie o podstawie q także w postaci skończonego rozwinięcia. 3. Jak przekonwertować liczbę ze znakiem z formatu word do quadword tak, by nie zmienić jej wartości? 4. Na czym technicznie polega a) pomnożenie; b) podzielenie liczby zapisanej w systemie o podstawie p przez liczbę p^k (p = 2, 3,..., k = 1; 2; ...)?
1. Oblicz wartość X liczby w systemie o podstawie p 2. Dokonaj dzielenia wartości X przez podstawę q 3. Wykonuj kolejne dzielenia używając wartości X jako dzielnej, zapisuj kolejne reszty z wykonanych dzieleń do puki dzielna >=q 4. Reszty z dzielenia w kolejności od ostatnio zapisanej do zapisanej jako pierwszej przedstawiają zapis w systemie o podstawie q
przykład: x = 21211 (w systemie o podstawie 3) wartość x wynosi: 2x3+1 = 7 7x3+2 = 23 23x3+1 = 70 70x3+1 = 201
wartość x wynosi: 201 przekonwertujemy ją np na system o podstawie 4
201:4 = 50 201mod4 = 1
50:4 = 12 50mod4 = 2
12:4 = 3 12mod4 = 0
dzielna<q zatem ostatnia reszta z dzielenia modulo 3mod4 = 3
Kolejne reszty poczynając od ostatnio zapisanej to: 3021 zatem liczba 21211 w systemie o podstawie 3, w systemie o podstawie 4 posiada reprezentacje w postaci 3021
Można to łatwo sprawdzić obliczając jej wartość:
3*4+0 = 12 12*4+2 = 50 50*4+1 = 201 Wartość liczby się zgadza, zatem reprezentacja również.
2. Nie słyszałem nigdy o takich warunkach, które by to gwarantowały. 3. Konwersja z założenia nie zmienia wartości tylko co najwyżej format ;) Liczba wielkości Word, jak sama nazwa wskazuje jest długości słowa, zatem quad word będzie to długość 4 słów. Jak wiadomo (albo i nie) jeśli mamy do czynienia z liczbą z zakodowanym znakiem, należy pamiętać iż jest on kodowany na najstarszej pozycji, natomiast wartość kodowana jest na pozycjach odpowiadającym odpowiednim wagom. Zatem przykład dla arch x86.
Jeśli masz liczbę ze znakiem, powiedzmy 0x6703 czyli 01100111 00000011 i chcesz ją zakodować jako czterosłowo, to zachowujesz bit najstarszy, który jest 0 (liczba dodatnia) i odpowiednio rozszerzasz 0 z lewej strony czyli:
4. Pomnożenie odpowiada przesunięciu bitowemu w lewo a podzielenie przesunięciu bitowemu w prawo o k pozycji. Przykład (dzielenie mnożenie przez 2^1):
Masz liczbę dajmy na to 13, czyli 1101. przesunięcie w lewo polega na dopisaniu 0 z prawej strony, przez co zmieniasz wagi zwiększając je o 1, czyli wykonujesz mnożenie przez podstawę systemu (p^k gdzie p to podstawa a k to liczba pozycji), tutaj akurat przez 2. Można to sprawdzić, po przesunięciu w lewo mamy zatem liczbę 11010 co daje nam: 1*2+1 = 3 3*2+0 = 6 6*2+1 = 13 13*2+0 = 26
Co by się zgadzało bo 13x2 to 26 ;)
Analogicznie z dzieleniem. Dajmy na to liczba 13 czyli 1101 przesunięta w prawo wymaga przeniesienia wszystkich bitów o 1 pozycje. Jako że mamy tutaj akurat liczby całkowite to mamy dzielenie całkowitoliczbowe zatem po przesunięciu otrzymujemy 110 zatem 6. Zasada jest taka sama dla liczb stałoprzecinkowych.
1. Oblicz wartość X liczby w systemie o podstawie p
2. Dokonaj dzielenia wartości X przez podstawę q
3. Wykonuj kolejne dzielenia używając wartości X jako dzielnej, zapisuj kolejne reszty z wykonanych dzieleń do puki dzielna >=q
4. Reszty z dzielenia w kolejności od ostatnio zapisanej do zapisanej jako pierwszej przedstawiają zapis w systemie o podstawie q
przykład:
x = 21211 (w systemie o podstawie 3)
wartość x wynosi:
2x3+1 = 7
7x3+2 = 23
23x3+1 = 70
70x3+1 = 201
wartość x wynosi: 201
przekonwertujemy ją np na system o podstawie 4
201:4 = 50
201mod4 = 1
50:4 = 12
50mod4 = 2
12:4 = 3
12mod4 = 0
dzielna<q zatem ostatnia reszta z dzielenia modulo
3mod4 = 3
Kolejne reszty poczynając od ostatnio zapisanej to: 3021
zatem liczba 21211 w systemie o podstawie 3, w systemie o podstawie 4 posiada reprezentacje w postaci 3021
Można to łatwo sprawdzić obliczając jej wartość:
3*4+0 = 12
12*4+2 = 50
50*4+1 = 201
Wartość liczby się zgadza, zatem reprezentacja również.
2. Nie słyszałem nigdy o takich warunkach, które by to gwarantowały.
3. Konwersja z założenia nie zmienia wartości tylko co najwyżej format ;)
Liczba wielkości Word, jak sama nazwa wskazuje jest długości słowa, zatem quad word będzie to długość 4 słów. Jak wiadomo (albo i nie) jeśli mamy do czynienia z liczbą z zakodowanym znakiem, należy pamiętać iż jest on kodowany na najstarszej pozycji, natomiast wartość kodowana jest na pozycjach odpowiadającym odpowiednim wagom. Zatem przykład dla arch x86.
Jeśli masz liczbę ze znakiem, powiedzmy 0x6703 czyli 01100111 00000011 i chcesz ją zakodować jako czterosłowo, to zachowujesz bit najstarszy, który jest 0 (liczba dodatnia) i odpowiednio rozszerzasz 0 z lewej strony czyli:
00000000 00000000 00000000 00000000 00000000 00000000 01100111 00000011
4. Pomnożenie odpowiada przesunięciu bitowemu w lewo a podzielenie przesunięciu bitowemu w prawo o k pozycji. Przykład (dzielenie mnożenie przez 2^1):
Masz liczbę dajmy na to 13, czyli 1101. przesunięcie w lewo polega na dopisaniu 0 z prawej strony, przez co zmieniasz wagi zwiększając je o 1, czyli wykonujesz mnożenie przez podstawę systemu (p^k gdzie p to podstawa a k to liczba pozycji), tutaj akurat przez 2. Można to sprawdzić, po przesunięciu w lewo mamy zatem liczbę 11010 co daje nam:
1*2+1 = 3
3*2+0 = 6
6*2+1 = 13
13*2+0 = 26
Co by się zgadzało bo 13x2 to 26 ;)
Analogicznie z dzieleniem. Dajmy na to liczba 13 czyli 1101 przesunięta w prawo wymaga przeniesienia wszystkich bitów o 1 pozycje. Jako że mamy tutaj akurat liczby całkowite to mamy dzielenie całkowitoliczbowe zatem po przesunięciu otrzymujemy 110 zatem 6. Zasada jest taka sama dla liczb stałoprzecinkowych.
Mam nadzieję, że pomogłem.