System ósemkowy i szesnastkowy

background image

I Liceum Ogólnokształcące

im. Kazimierza Brodzińskiego

w Tarnowie

©2018 mgr Jerzy Wałaszek

Prezentowane materiały są przeznaczone dla uczniów szkół ponadgimnazjalnych

.

Autor artykułu: mgr Jerzy Wałaszek, wersja1.0

©2010 mgr Jerzy Wałaszek

I LO w Tarnowie

System ósemkowy

Oprócz systemu dwójkowego w informatyce powszechnie są stosowane dwa systemy - ósemkowy (oktalny) oraz szesnastkowy
(heksadecymalny). Powodem ich stosowania jest to, iż bardzo łatwo jest przeliczać pomiędzy nimi a systemem dwójkowym. Liczba ósemkowa
jest dla ludzi bardziej czytelna od liczby dwójkowej.

W systemie ósemkowym mamy 8 cyfr: 0, 1, 2, 3, 4, 5, 6 i 7. Wartość liczby ósemkowej obliczamy wg wzoru:

W

8

= c

n-1

8

n-1

+ c

n-2

8

n-2

+ ... + c

2

8

2

+ c

1

8 + c

0

c

i

, i = 0,1,...,n-1 - kolejne cyfry ósemkowe zapisu liczby

Przykład:

7231

8

= 7 × 8

3

+ 2 × 8

2

+ 3 × 8 + 1

7231

8

= 7 × 512 + 2 × 64 + 3 × 8 + 1

7231

8

= 3584 + 128 + 24 + 1

7231

8

= 3737

Istnieje również inny algorytm obliczania wartości dowolnej liczby pozycyjnej, zwany schematem Hornera. Postępujemy następująco:

Za wynik W przyjmujemy pierwszą od lewej cyfrę liczby. Kolejne cyfry liczby odczytujemy od strony lewej ku prawej.

Dopóki są dalsze cyfry, wynik W mnożymy przez podstawę systemu i dodajemy do niego kolejną cyfrę, aż do ich wyczerpania.

Na końcu W zawiera wartość liczby.

Przykład:

Mamy znaleźć wartość liczby ósemkowej 7231

8

. Kolejne cyfry to 7, 2, 3 i 1. Zaczynamy:

W ← 7

W ← W × 8 + 2 = 7 × 8 + 2 = 58

W ← W × 8 + 3 = 58 × 8 + 3 = 467

W ← W × 8 + 1 = 467 × 8 + 1 = 3737 - koniec

Schemat Hornera wykorzystują programy obliczające wartość liczb w innych systemach pozycyjnych.

Do wyznaczenia zapisu liczby L w systemie ósemkowym możemy wykorzystać poznany wcześniej algorytm dla systemu dwójkowego, po
drobnej modyfikacji:

L dzielimy przez podstawę systemu docelowego. Za kolejną od końca cyfrę przyjmujemy resztę z dzielenia. Za nowe L
przyjmujemy wynik dzielenia całkowitoliczbowego. Jeśli L jest różne od zera, operację powtarzamy. Inaczej wyświetlamy
otrzymane cyfry w kierunku odwrotnym do ich wyznaczenia.

Przykład:

Mamy znaleźć reprezentację liczby 10000 w systemie ósemkowym.

10000 : 8 = 1250, reszta 0

1250 : 8 =

156, reszta 2

156 : 8 =

19, reszta 4

19 : 8 =

2 reszta 3

2 : 8 =

0 reszta 2

10000 = 23420

8

Liczby ósemkowe bardzo prosto przeliczamy na system binarny. Jedna cyfra ósemkowa zawsze przechodzi w trzy cyfry binarne:

cyfra

ósemkowa

cyfry

dwójkowe

0

000

1

001

2

010

3

011

4

100

5

101

6

110

7

111

Gdy zamieniamy liczbę ósemkową na odpowiadającą jej co do wartości liczbę binarną, każdą cyfrę ósemkową zastępujemy trzema cyframi
binarnymi zgodnie z tabelką. Na przykład, liczba ósemkowa 23420

8

ma w systemie dwójkowym następującą postać:

23420

8

2

3

4

2

0

010 011 100 010 000 →010011100010000

2

Zwróć uwagę, że dla człowieka liczba ósemkowa jest bardziej czytelna od jej odpowiednika dwójkowego. To jest właśnie powód popularności
systemu ósemkowego wśród programistów, którzy muszą przekazywać do programów wartości związane z systemem dwójkowym.

W drugą stronę postępujemy podobnie. Liczbę dwójkową dzielimy na trójki bitów. Jeśli ostatnia trójka jest niepełna, uzupełniamy ją bitami o
wartości 0. Następnie każdą z trójek zastępujemy odpowiadającą im cyfrą ósemkową. Konwersja skończona. Dla przykładu przekształćmy jakąś
liczbę dwójkową na ósemkową:

1101110101011101010101

2

→ 001 101 110 101 011 101 010 101

1

5

6

5

3

5

2

5

→ 15653525

8

System szesnastkowy

System szesnastkowy posiada 16 cyfr: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Pierwsze 10 cyfr jest takie same jak w systemie dziesiętnym.
Za kolejne 6 cyfr przyjęto pierwsze litery alfabetu. Litery te w zapisie liczby mogą być małe lub duże. Wartości tych cyfr to kolejno A=10, B=11,
C= 12, D=13, E=14, F=15.

Wartość liczby szesnastkowej obliczamy ze wzoru:

W

16

= c

n-1

16

n-1

+ c

n-2

16

n-2

+ ... + c

2

16

2

+ c

1

16 + c

0

c

i

, i = 0,1,...,n-1 - kolejne cyfry szesnastkowe zapisu liczby

Przykład:

AFD3

16

= 10 × 16

3

+ 15 × 16

2

+ 13 × 16 + 3

AFD3

16

= 10 × 4096 + 15 × 256 + 13 × 16 + 3

AFD3

16

= 40960 + 3840 + 208 + 3

AFD3

16

= 45011

To samo schematem Hornera:

W ← 10

W ← W × 16 + 15 = 160 + 15 = 175

W ← W × 16 + 13 = 2800 + 13 = 2813

W ← W × 16 + 3 = 45008 + 3 = 45011

Liczbę dziesiętną przeliczamy na 16 wg poznanego schematu:

Przykład:

Mamy znaleźć reprezentację liczby 99999 w systemie szesnastkowym.

99999 : 16 = 6249, reszta 15 - cyfra F

6249 : 16 =

390, reszta 9

390 : 16 =

24, reszta 6

24 : 16 =

1. reszta 8

1 : 16 =

0, reszta 1

99999 = 1869F

16

Liczby szesnastkowe również jest łatwo przeliczać na liczby dwójkowe. W tym przypadku każda cyfra szesnastkowa zastępuje cztery cyfry
binarne - dzięki temu liczby szesnastkowe bardzo dobrze odwzorowują dane 8, 16, 32 bitowe. Tabelka konwersji jest następująca:

cyfra

szesnastkowa

cyfry

dwójkowe

0

0000

1

0001

2

0010

3

0011

4

0100

5

0101

6

0110

7

0111

8

1000

9

1001

A

1010

B

1011

C

1100

D

1101

E

1110

F

1111

Przeliczanie liczby szesnastkowej na ósemkową polega na zamianie każdej cyfry szesnastkowej grupą 4 cyfr binarnych:

AF9D7

16

A

F

9

D

7

1010 1111 1001 1101 0111 →10101111100111010111

2

W drugą stronę bity rozdzielamy poczynając od końca liczby na grupy 4 bitowe. Ostatnia grupa może być niepełna - dopełniamy ją bitami o
wartości 0. Każdą grupę zastępujemy odpowiadającą im cyfrą szesnastkową:

1101111101111111000101

2

→ 0011 0111 1101 1111 1100 0101

3

7

D

F

C

5

→ 37DFC5

8

Poniższy program w języku C++ oblicza wartość liczby pozycyjnej w dowolnym systemie od 2 do 16. Cyfry większe od 9 należy podawać jako
duże litery. Na początku wpisujemy podstawę systemu, w którym jest zapisana liczba, a następnie samą liczbę.

// Obliczanie wartości liczb pozycyjnych

// (C)2011 I LO w Tarnowie

//--------------------------------------

#include <iostream>

using

namespace

std

;

int

main

()

{

char

cyfry

[

256

];

unsigned

p

,

i

,

W

,

c

;


cin

>>

p

;

// odczytujemy podstawę


cin

>>

cyfry

;

// odczytujemy cyfry


W

=

cyfry

[

0

] -

48

;

// wartość cyfry

if

(

W

>

9

)

W

-=

7

;

// korekta dla cyfr literowych


for

(

i

=

1

;

cyfry

[

i

];

i

++)

{

c

=

cyfry

[

i

] -

48

;

if

(

c

>

9

)

c

-=

7

;

W

=

W

*

p

+

c

;

}

cout

<<

W

;


return

0

;

}

16

CCFF95

13434773

Drugi program przelicza podaną liczbę dziesiętną na liczbę w innym systemie liczbowym. Pierwszy parametr to podstawa systemu docelowego.
Drugi parametr to wartość dziesiętna do przeliczenia.

// Przeliczanie na inny system liczbowy

// (C)2011 I LO w Tarnowie

//--------------------------------------

#include <iostream>

using

namespace

std

;

int

main

()

{

char

cyfry

[

256

];

unsigned

p

,

i

,

L

,

c

;


cin

>>

p

;

// odczytujemy podstawę


cin

>>

L

;

// odczytujemy liczbę


for

(

i

=

0

;

L

;

i

++)

{

c

=

L

%

p

;

// wyliczamy cyfrę

if

(

c

>

9

)

c

+=

7

;

// poprawka na cyfry literowe

cyfry

[

i

] =

c

+

48

;

// wstawiamy cyfrę do tablicy

L

/=

p

;

// modyfikujemy liczbę

}

do

cout

<<

cyfry

[--

i

];

// cyfry wyświetlamy odwrotnie

while

(

i

);


cout

<<

endl

;


return

0

;

}

16

65535

FFFF

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji

GNU Free Documentation License.

Pytania proszę przesyłać na adres email:

i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,

zablokuj je w swojej przeglądarce.

Informacje dodatkowe


Wyszukiwarka

Podobne podstrony:
system osemkowy i szesnastkowy
05 System ósemkowy i szesnastkowy
ZAMIANA LICZB MIĘDZY SYSTEMAMI DWÓJKOWYM I SZESNASTKOWYM
System heksdecymalny (szesnastkowy)
ZAMIANA LICZB MIĘDZY SYSTEMAMI DWÓJKOWYM I SZESNASTKOWYMx
System heksadecymalny (szesnastkowy)
Sysetemy szsnastkowy i inne, Systemy bianrny,dziesietny,szesnastkowy, Reprezentacje liczb
system szesnastkowy
Szesnastkowy system liczbowy
System szesnastkowy
SYSTEM SZESNASTKOWY
Ósemkowy system liczbowy, NAUKA, algorytmy i struktury danych, WAT
Szesnastkowy system liczbowy
Szesnastkowy system liczbowy, NAUKA, algorytmy i struktury danych, WAT
Sysetemy szsnastkowy i inne, ZAMIANA LICZB MIĘDZY SYSTEMAMI SZESNASTKOWYM I DZIESIĘTNYM, ZAMIANA LIC

więcej podobnych podstron