background image

Reprezentacja liczb całkowitych w komputerze. 

 

Do przechowywania i przetwarzania liczb w komputerze używany jest system binarny. 
8-bitowe słowo mogłoby reprezentowad liczbę całkowitą z przedziału <0;255>. 
n-bitowy ciąg: a

n-1

a

n-2

 …a

1

 a

0  

jest interpretowany jako liczba całkowita bez znaku o wartości A 

obliczanej wg wzoru: 
 

 
Np.  ciąg binarny 10101010: 
 
   2

7    

  2

6

     2

5

      2

    2

3         

2

2

       2

1      

  2

0

 

   1      0      1       0       1       0         1       0 
Reprezentuje liczbę o wartości: 
 
  128 + 0 +  32 +  0 +  8 +    0  +     2 +   0  = 170 

Taki sposób reprezentacji nie pozwala na zapis liczb ujemnych. Istnieją cztery sposoby reprezentacji 
liczb całkowitych niedodatnich: 
 

 

Reprezentacja znak-moduł (signed magnitude
 
Najbardziej znaczący bit - znak liczby:  
0 – liczba dodatnia, 
 1 – liczba ujemna 
Pozostałe bity – wartośd bezwzględna liczby 
 
Np. dla kodu 8-bitowego: 

kod znak-moduł(5) = 00000101 
kod znak-moduł(-5)= 10000101 

 

 

Kod uzupełnienia do 1 (U1) 
 
Liczba przeciwna (zmiana znaku) – zanegowane wszystkie bity  (uzupełnienie do 1) 
 
Np. dla kodu 8-bitowego: 
          kodU1(5) = 00000101 
          kodU1(-5)= 11111010 
 

 

Kod uzupełnienia do 2 (U2) 
 
Dla n-bitowej liczby ujemnej (–a) jej kod wynosi 2

n

 a  

Praktyczny sposób kodowania liczby ujemnej polega na zanegowaniu wszystkich bitów  i 
dodaniu wartości „1”. Wynika to z następujących równości: 
 
a + ~a= 2

n

-1          -  dodając liczbę binarną a o n cyfrach i liczbę uzyskaną poprzez 

zanegowanie każdego z jej bitów uzyskujemy na każdej z n pozycji wartośd 
„1” , czyli liczbę 2

n

-

 

1

0

2

n

=

i

i

i

a

=

A

background image

 2

n

-a= ~+ 1 

- oznacza to, że aby uzyskad kod liczby ujemnej (2

n

-a), należy zanegowad 

każdy bit liczby a i dodad „1”  

 
kod U2 (a)= a ; 

 

a>=0 

kod U2 (a)= ~+ 1; 

a<0 

 
Np. dla kodu 8-bitowego: 
          kodU2(5) = 00000101 
          kodU2(-5)= 11111011 
 
Dla liczby a będącej ciągiem cyfr binarnych: a

n-1

a

n-2

 …a

1

 a

0   

jej wartośd dziesiętna wyraża się 

wzorem: 
 
 
 
 
Przykład: 
 Rozważmy liczbę binarną liczba=10010011 
 
-2

7              

2

6

       2

5       

2

4

      2

3

       2

2

      2

1

     2

0

 

-128    64      32     16      8       4        2        1 
1           0         0       1       0       0        1        1  
 
Liczba=-128+16+2+1=-109 
 
A teraz sprawdzenie: zapiszmy liczbę dziesiętną -109 w  kodzie U2: 
 
  109 

   54 

    27 

     01101101 -> 10010010 + 1 = 10010011 

    13 

 

 

      6 

    wartośd binarna 

      3 

    liczby 109 

     negacja bitowa 

      1 

1  

      0 

 
 
 
 
Uwaga:    Inny,  praktyczny   sposób  zakodowania  liczby  ujemnej  polega  na  tym, że  najpierw 

kodujemy  binarnie  wartośd  bezwzględną  zamienianej  liczby,  a  następnie 
przeglądamy  uzyskaną  liczbę  dwójkową  od  pozycji  o  najmniejszej  wadze,  czyli  od 
prawej  strony  i  do  wystąpienia  pierwszej  jedynki  włącznie  bity  pozostawiamy 
niezmienione, następnie zamieniamy na przeciwny każdy kolejny bit. 

 
 

2

0

1

1

2

2

n

=

i

i

i

n

n

a

+

a

=

a

background image

Przykład: 
Zamieomy liczbę  -109 

1.  109

10 

   =    01101101

2

  

2.   0 1 1 0 1 1 0 1 

 

         

zamiana

                            

pozostaje niezmieniona 

1  0 0 1 0 0 1 1  
 

Przykład: 

Sprawdzenie co to za liczba: 1111111110011010

 

Przeciwnie do zamiany na liczbę ujemną 

 

 

 

 

1111111110011001 

(l-1)  - odjęcie „1” 

 

0000000001100110 

(~l)  - negacja   

wynik: liczba 102 

 

lub ponowna zamiana 1111111110011010 na liczbę przeciwną: 

 

0000000001100101    (~l)   - negacja 

0000000001100110 

(l+1) – dodanie „1” 

 

lub poprzez zamianę bitów począwszy od ostatniej „1” 
 
………………………..

10

      

ostatnie 2 bity pozostają bez zmian

 

0000000011001

10       

pozostałe bity zostają zamienione na przeciwne

 

 

 

Kod z nadmiarem 2

n-1

 

Każda liczba jest „przesunięta do przodu” o pewną stałą nazywaną BIAS (biased exponent

). 

Może to byd

 

 wartośd 2

n-1

 (n -liczba bitów reprezentacji). Jej kod uzyskuje się przez dodanie 

tej wartości i kodowanie binarne.  
Mając  do  dyspozycji  8  bitów  można  zakodowad  binarnie    liczby  z  przedziału  <0;  255>, 
natomiast  korzystając  z  kodu  z  nadmiarem  2

n-1

    czyli  2

7

  =  128  uzyskujemy  możliwośd 

zakodowania liczb z przedziału  <-128; 127>. Ciąg kodowy złożony z samych „0” odpowiada 
najmniejszej  liczbie  z  zakresu,  czyli  wartości  -128  (w  przypadku  8  bitów  i  nadmiaru  128), 
natomiast kod złożony z samych „1”  odpowiada wartości 127.  
 
Np. dla kodu 8-bitowego BIAS 128 wartości liczby 5 i -5 można policzyd w następujący 
sposób: 
          kod z nadmiarem 128 (5) = kod binarny(128+5)  = 10000101 
          kod z nadmiarem 128 (-5) = kod binarny (128-5) = kod binarny(123) = 01111011 
 
 
 
 

background image

Zarówno w reprezentacji znak-moduł, jak i w kodzie U1 występuje podwójna reprezentacja liczby 0. 
Problem ten nie występuje w kodzie U2 (próba zamienienia liczby 00000000 na ujemną prowadzi do 
uzyskania tego samego kodu: 00000000 ->  11111111 + 1 -> 00000000). 

 
 

Porównanie reprezentacji liczb całkowitych w 8-bitowych kodach: 

Liczba 

dziesiętna 

Znak-moduł 

U1 

U2 

Nadmiar 
128 

10 

00001010 

00001010 

00001010 

10001010 

00000111 

00000111 

00000111 

10000111 

00000011 

00000011 

00000011 

00000011 

00000000 

00000000 

00000000 

10000000 

-0 

10000000 

01111111 

-3 

10000011 

11111100 

11111101 

01111101 

-7 

10000111 

11111000 

11111001 

01111001 

-10 

10001010 

11110101 

11110110 

01110110 

 

Konwersja między różnymi długościami bitowymi reprezentacji 

Przykład: zapisanie na 16 bitach liczby 8-bitowej 

Znak-moduł:  przesunięcie bitu znaku na pierwsza pozycję i wypełnienie „0” pozostałych pozycji: 

00011010 

-> 

0000000000011010 

 

liczba    26 

10011010 

-> 

1000000000011010 

 

liczba   -26 

 

Kod U1:  wypełnienie bitem znaku dodanych pozycji: 

00011010 

-> 

0000000000011010 

 

liczba 26 

11100101 

-> 

1111111111100101 

 

liczba -26 

 

Kod U2:  wypełnienie bitem znaku dodanych pozycji: 

00011010 

-> 

0000000000011010 

 

liczba 26 

11100110 

-> 

1111111111100110 

 

liczba -26