Skocz do zawartości

Featured Replies

Napisano

Witam dostałem zadanko do wyliczenia ale nie umiem go wyliczyc

 

Jaką wartość zapisano w komórce, jeżeli jest to liczba FPU o schemacie: 1bit znaku. 5 bitów cechy U2, 10 bitów mantysy znormalizowanej? 0110010101010111

  • Odpowiedzi 20
  • Wyświetleń 2,6k
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano

jesli trzebaby to przeliczyc na system dziesietny z binarnego to bym umial ale ///ta tresc mnie przeraza :)

Napisano

nie wiem co to znaczy ale windowsowy kalkulator przelicza binarne.

w dziesietnym to 25943.

Napisano

Według mnie, jeśli się nie walnąłem, jest to 0,342e(-7).

 

chveti - tak nie można przeliczać. To nie jest taka "normalna" liczba binarna.

 

[edit]

Albo 0,343e-7 ;)

Napisano

Wlasnie policzylem i z tego co pamietam z elektroniki cyfrowej wyszlo podobnie - a nawet tak samo jak Piotrkowi.

Napisano

Masz liczbę 0110010101010111.

 

Najsarszy bit to bit znaku (0), dalej - 5 bitów cechy (11001) i 10 bitów to matysa znormalizowana (0101010111).

 

Bit znaku, czyli gdy jest 0, jest "+", gdzy jest 1 - "-".

 

Cecha jest w U2, więc to jest (2^x oznacza 2 do potęgi x), czytając ją od końca:

1 * 2^0 + 0 * 2^1 + 0 * 2^2 + 1 * 2^3 + (-1) * 2^4 czyli -7.

 

Mantysa ma 10 cyfr, więc podobnie, tyle że bez U2:

2^0 + 2^1 + 2^2 + 2^4 + 2^6 + 2^8 = 1 + 2 + 4 + 16 + 64 + 256 = 343.

Ponieważ mantysa znormalizowana, oznacza to 0.343.

 

Idea jest taka, że liczba w takim systemie to mantysa * 10^cecha, więc ostatecznie:

0.343 * 10^(-7).

 

Chociaż w sumie to chyba powinno być 0.343 * 2^(-7), ponieważ jesteśmy w systemie binarnym.

Zresztą nie wiem... Najlepiej dopytaj się kogoś.

Napisano
  • Autor

Ok ale nie rozumiem dlaczego cyfr w cesze jest 5 tak 11001 to dlaczego w działaniu jest 6 działań w tym jedno z -1

I ponizej w mantysie jest działąń tylko 6 a ona przeciez składa sie z 10 cyfr

Napisano

Liczbę w dowolnym systemie zpisujemy przy pomocy znaków (u nas są to cyfry arabskie 123456789. Równie dobrze mogłyby to być gwiazdki, kreseczki, kropeczki, krzaczki etc. ;) ):

 

a b c d e f g h i j k

 

System, którego używamy jest sytemem pozycyjnym, więc znaczenie każdego znaku/cyfry zależy od pozycji na jakiej się znajduje. Pozycje numerujemy od zera od prawej strony.

I tak w powyższym przykładzie: "k" jest na pozycji 0, "j" na pozycji 1 itd.

 

Wartość liczbową takiego wyrażenia oblicza się, jak następuje:

k*base^0 + j * base^1 + i * base^2 + h * base^3 + ... + b * base^9 + a * base^10

 

base to podstawa systemu, tym wypadku jest to 2, gdyż jest sytem dwójkowy, w trójkowym byłoby 3, w dziesiętnym byłoby 10, w szesnastkowym 16.

 

Ponieważ w systemie dwójkowym występują tylko dwie cyfry - 0 i 1 odpowiednie potęgi 2 mnoży się albo przez jeden, albo przez zero...

 

Liczbę 10011

Można zapisać jako 1 * 2^0 + 1 * 2^1 + 0 * 2^2 + 0 * 2^3 + 1 * 2^4.

 

Tak samo jest w poście wyżej, tylko po prostu tam pominąłem zera, bo zero pomnożone przez dowolną liczbę jest zero ;)

 

Przykład w systemie dziesiętnym (trochę masło maślane, ale chyba jasne):

Jest sobie liczba 496 zapisana w systemie dziesiętnym.

Jej wartość można wyliczyć rozkładając ją w wielomian, jak powyżej:

 

6 * 10^0 + 9 * 10^1 + 4 * 10^2 = 6*1 + 9*10 + 4*100 = 496.

 

Ta sama liczba 496 zapisana w systemie czternastkowym, miałaby wartość:

 

6 * 14^0 + 9 * 14^1 + 4 * 14^2 = 6 + 126 + 4*196 = 132 + 784 = 816 w systemie dziesiętnym.

 

 

 

W czesze powyżej jest -1, gdyż jest to kod uzupełnieniowy U2, a taka jest jego "specyfikacja", że najstarszy bit na wartość ujemną, czyli jest przemnożony przez -1. Ot, ktoś mądry wymyślił taki sposób na zapisywanie liczb ujemnych.

Napisano

Może i prymitywne, ale skoro jesteśmy przy temacie, to może się przydać do sprawdzenia poprawności zamiany ;) :

 

Zamiana z dziesiętnego na dwójkowy:

#include 
#include 

void sys2 (int x);

main()
{
char tablica[20];
int x;
int i = 0;

cout cin >> x;

  for (x; x > 0; i++) //wpisywanie wartosci do tablicy
  {
     if (x % 2 == 0)
        {
        tablica[i] = '0';
        x /= 2;
        }
     else
         {
         tablica[i] = '1';
         x = (x-1)/2;
         }
  }
  cout    for (i -= 1; i>= 0; i--)
      cout    cout 
system("pause");
}

 

Z dziesiętnego na szesnastkowy:

#include 
#include 

main ()
{
int reszta, x, dziel, odejm;

cout cin >> x;

for (x; x>0;(odejm > 0)? x -= odejm: x/= 16 )
   {
   reszta = x % 16;
   dziel = x/16;
   switch ((x>=16)?dziel:reszta)
          {
          case (10) :
               cout                 break;
          case (11) :
               cout                 break;
          case (12) :
               cout                 break;
          case (13) :
               cout                 break;
          case (14) :
               cout                 break;
          case (15) :
               cout            case (16) :
               cout                 break;
          default:
               cout =16)?dziel:reszta);
               break;
          }
   odejm = dziel * 16;
   }

cout system ("pause");
}

do skompilowania w dowolnym kompilatorze c++

Napisano

To czym różni się U2 od Zwyklej liczby binarnej i jeszcze jest 2M czy jak?

 

W U2 masz właśnie najstarszy bit ujemny. Tym się różnią.

Jest to jeden ze sposobów na zpisywanie liczba ujemnych.

 

2M? Nie wiem o co pytasz...

Napisano

Najsatrzy czyli pierwszy z lewej.

Jeśli masz liczbę ośmiobitową:

11111111

W zwykłym kodzie, jest to liczba 256: 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128.

W kodzie U2, te same bity: 11111111 oznaczają 1 + 2 + 4 + 8 +16 + 32 + 64 - 128 czyli liczbę -1.

 

Podobnie liczba 10000000 w zwykłym kodzie: 128, w U2: -128 ;)

Liczba 10000001 - w zwykłym 129, w U2 -127.

 

Generalnie te same bity mog oznaczać różne liczby, w zależności od kodu, w jakim zostają zinterpretowane.

Napisano

o chłopaki... macie mózgi;D

ja jak miałem programowanie na informatyce to zakuwałem programy w domu i potem pisałem;D A to co tutaj sie dzieje to juz jakiś kosmos poważniejszy jest.

Napisano
  • Autor

Czyli U2 jest zawsze ujemną liczbą? I w przypadku 111 to 1 + 2 - 4? Ale to zawsze wyjdzie -1 Heh

 

Hehe Freedom ja sie zastanawiam czemu sie tam pchałem ...

Czemu nie grafa ale co tam jest czas jak to skoncze to pójde na grafę:)

Napisano
  • Autor

I czmu tak???

Podobnie liczba 10000000 w zwykłym kodzie: 128, w U2: -128

Liczba 10000001 - w zwykłym 129, w U2 -127.

 

128 = -128

129 = -127 WHAT?

Napisano

O, matko!

Ale herezje piszecie. Znaczy to ostatnie co do cechy to prawda.

Więc po kolei, opowiem na tym konkretnym przykładzie a po resztę odsyłam do świetnych materiałów przygotowanych przez mojego kolegę do nauki Arytmetyki Komputerów na pierwszym roku Informatyki, na wydziale Elektroniki na Politechnice Wrocławskiej :D *(stary, never forget !)

 

http://mr-k.namyslow.eu.org/studia/arytmetyka.html

a konkretnie to

http://wk-group.net/mr-k/pliki/studia/arytmetyka/zmiennoprzecinkowe_v07.pdf

 

 

więc tak

0 11001 0101010111

S E M

 

S - znak (ang. sign)

E - eksponent, wykładnik cecha (ang. exponent)

M - mantysa

 

przeliczanie wygląda następująco

liczba ma postać :

 

(-1)^S * M * 2^E

 

^ - znak potęgi

 

cecha jest zapisem w U2 z obciążeniem (2^(k-1) - 1)

11001

obliczamy tak jak normalny binarny (od najmłodszej pozycji(prawej) ) czyli

1*2^0 + 0*2^1 + 0*2^2 + 1*2^3 + 1*2^4 = 25

dla 5 bitów liczba zapisaną 1ką na najstarszej pozycji (po lewej)

jest 1*2^4 = 16, jeszcze odejmuje my 1, czyli 15

Zatem wykładnik E = 25-15 = 10

 

Dalej mantysa jest ułamkiem, należy pamiętać by dodać 1 (pomijana, dzięki czemu oszczędza się bit), więc liczba ma naprawdę postać

1,0101010111

oczywiście mówimy to o postaci znormalizowanej, postać zdenormalizowana to oddzielna bajka (odsyłam do materiałów).

 

zatem

1*2^0 + 0*2^-1 + 1*2^-2 .... = 1 + 343/1024

 

zatem ostatecznie

 

(-1)^0 * (1+ 343/1024) * 2^10

^

czyli liczba dodatnia

 

I niech moc JB będzie z Wami ! :cool:

Napisano
  • Autor

No nic dziekuje wszystkim ZADANIE NIE UDAŁO MI SIE NAPISAĆ ale egzamin zaliczyłem na to minimum :)

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności