Napisano 7 Luty 200817 l 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
Napisano 7 Luty 200817 l jesli trzebaby to przeliczyc na system dziesietny z binarnego to bym umial ale ///ta tresc mnie przeraza :)
Napisano 7 Luty 200817 l nie wiem co to znaczy ale windowsowy kalkulator przelicza binarne. w dziesietnym to 25943.
Napisano 7 Luty 200817 l 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 7 Luty 200817 l Wlasnie policzylem i z tego co pamietam z elektroniki cyfrowej wyszlo podobnie - a nawet tak samo jak Piotrkowi.
Napisano 7 Luty 200817 l 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 7 Luty 200817 l 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 7 Luty 200817 l 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 7 Luty 200817 l Autor Ojej dzieki To czym różni się U2 od Zwyklej liczby binarnej i jeszcze jest 2M czy jak?
Napisano 7 Luty 200817 l 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 7 Luty 200817 l 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 7 Luty 200817 l 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 7 Luty 200817 l 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 7 Luty 200817 l 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 7 Luty 200817 l 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 7 Luty 200817 l 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 9 Luty 200817 l 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