układy cyfrowe, przesyłanie informacji w kodzie binarnym

Awatar użytkownika
exculibrus
Użytkownik
Użytkownik
Posty: 77
Rejestracja: 31 sty 2008, o 14:37
Płeć: Mężczyzna
Lokalizacja: Lubin
Podziękował: 28 razy
Pomógł: 6 razy

układy cyfrowe, przesyłanie informacji w kodzie binarnym

Post autor: exculibrus » 15 gru 2008, o 17:04

Uczę się C, przerabiam również książkę o układach cyfrowych ale ciągle mam w głowie niejasności, stąd kilka pytań. Jak wygląda przepływ informacji w komputerze- jeśli mamy procesor 16 bitowy, to możemy zapisać w tym od -32768 do +32767, więc jak zapisujemy liczby? No bo skoro mogę się posłużyć każdą z liczb całkowitych od 1 do np. 800000, to nie rozumiem czego tyczyły by się w takim razie możliwe znaki? I stąd procesory 8, 16, 32, 64 bitowe. Na czym dokładnie polega granica błędu i przybliżanie wartości przez komputer: bo skoro mogę ze sporym przybliżeniem obliczać np. \(\displaystyle{ \pi}\), gdzie przybliżenie zależy od tego jak długo zostawię włączony komputer to czym właściwie jest przybliżenie? Czym są operacje dzielenia i mnożenia logicznego oraz dlaczego łatwiej jest wykonywać te operacje w kodzie ZM niż w U2?

smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

układy cyfrowe, przesyłanie informacji w kodzie binarnym

Post autor: smiechowiec » 16 gru 2008, o 09:49

Zakres pytań należy do podstawowych.
Dobrze więc było by zacząć od podstawowej literatury.
jeśli mamy procesor 16 bitowy, to możemy zapisać w tym od -32768 do +32767,
To kwestia formalna, ale w procesorze nie zapisujemy, a w pamięci.
Procesor 16 bitowy może korzystać z rejestrów 16 bitowych na których możemy zapisać 2^16 liczb. Jeśli zależy nam aby były to liczby ze znakiem wtedy 1 bit poświęcamy na znak a wartość liczby zapisujemy na pozostałych 15 bitach co daje nam wskazany przez Ciebie zakres od \(\displaystyle{ -2^{15}\ do\ -1\ i\ od\ 0\ do\ 2^{15} - 1}\)


Czym są operacje dzielenia i mnożenia logicznego oraz dlaczego łatwiej jest wykonywać te operacje w kodzie ZM niż w U2?
więc jak zapisujemy liczby?
Liczby całkowite zapisujemy jako ciąg 16 bitów czyli cyfr 0 lub 1
przykładowo liczba 30 000 (dziesiętnie) = 111010100110000 (binarnie)
Najprościej to poćwiczyć w kalkulatorze windows - widok profesjonalny.
No bo skoro mogę się posłużyć każdą z liczb całkowitych od 1 do np. 800000, to nie rozumiem czego tyczyły by się w takim razie możliwe znaki?
Nie możesz zapisać każdej liczby całkowitej na 16 bitach, a jedynie te z zakresu, który podałeś. Większe liczby nie mieszczą się w przewidzianym dla nich obszarze.
I stąd procesory 8, 16, 32, 64 bitowe. Na czym dokładnie polega granica błędu i przybliżanie wartości przez komputer: bo skoro mogę ze sporym przybliżeniem obliczać np. , gdzie przybliżenie zależy od tego jak długo zostawię włączony komputer to czym właściwie jest przybliżenie?
Jest to nieporozumienie.
Liczby całkowite zapisywane są dokładnie, tzn bez przybliżeń.
W celu zapisania większych lub mniejszych liczb stosuje się liczby zmiennoprzecinkowe, które pozwalają pamiętać wykładnik potęgi i kilka cyfr znaczących.
Jako, że pamięć komputera jest ograniczona, nie istnieją metody wyliczania liczb z dowolną dokładnością.

Awatar użytkownika
exculibrus
Użytkownik
Użytkownik
Posty: 77
Rejestracja: 31 sty 2008, o 14:37
Płeć: Mężczyzna
Lokalizacja: Lubin
Podziękował: 28 razy
Pomógł: 6 razy

układy cyfrowe, przesyłanie informacji w kodzie binarnym

Post autor: exculibrus » 16 gru 2008, o 17:52

Jeśli większe liczby nie mieszczą się w przewidzianym obszarze to jak to zapisywać? Nauczyciel informatyki powiedział mi dzisiaj że to jest tak iż wszystkie procesory posługują się 8 bitami, więc jeśli mam procesor 32b to na jedno taktowanie procesor przelicza te 4B, a jeśli zapisuję liczbę \(\displaystyle{ 1 000 000}\), to zapisuję ją w 7 bitach, w każdym inną cyfrę... Możesz całkiwicie skrytykować lub potwierdzić?


Jeśli większe liczby nie mieszczą się w przedziale to jak je zapisujemy? Domyślam się że mogę użyć kombinację: znak+ mantysa znormalizowana + wykładnik, ale to i tak są wyniki ograniczone.

Literaturę przerabiam podstawową właśnie: "Szkoła Programowania"- Stephen Prata i "Jak działa komputer?"- Krzysztof Wojtuszkiewicz.

P.S. Dziękuję za pomoc

smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

układy cyfrowe, przesyłanie informacji w kodzie binarnym

Post autor: smiechowiec » 17 gru 2008, o 21:59

exculibrus pisze:Jeśli większe liczby nie mieszczą się w przewidzianym obszarze to jak to zapisywać ?
Wszystko zależy od zastosowań. W zależności od tego jak dużej liczby potrzebujesz musisz dla nie zarezerwować odpowiedni obszar pamięci.
Najprostszy sposób zapamiętania dużej liczby to umieszczenie jej kolejnych cyfr dzisiętnych w łańcuchu znaków.
exculibrus pisze: Nauczyciel informatyki powiedział mi dzisiaj że to jest tak iż wszystkie procesory posługują się 8 bitam
Przypuszczam, że chodziło mu o fakt, że posługujemy się pojęciem bajtu (oktetu) który skład się z 8 bitów co stanowi dla nas 1 znak lub zakres wartości od 0 do 255.
exculibrus pisze:jeśli mam procesor 32b to na jedno taktowanie procesor przelicza te 4B, a jeśli zapisuję liczbę 1 000 000, to zapisuję ją w 7 bitach, w każdym inną cyfrę...
Taktowanie wiąże się z szybkością wykonywania instrukcji i odnosi się do częstotliwości.
Dla procesorów 32 bitowych podstawowe rejestry posiadają długość 32 bity czyli 4 bajty.
Jest to domyślna wielkość liczby całkowitej (integer) oraz wskaźnika adresującego pamięć (pointer).
Liczba 1 000 000 - jeżeli jest to liczba binarna to to odpowiada dziesiętnie wartości 64.
Taką liczbę można zapisać na wiele sposobów
w 1 bajcie zmienna typu char odpowiadająca znakowi @
w 2 bajtach zmienna typu short, w której jeden bajt jest równy zero a drugi 64
w 4 bajtach zmienna typu int, w której 3 bajty są równe zero, a jeden 64
i na wiele innych sposobów w zależności od tego do czego jest nam potrzebna.
exculibrus pisze: Jeśli większe liczby nie mieszczą się w przedziale to jak je zapisujemy? Domyślam się że mogę użyć kombinację: znak+ mantysa znormalizowana + wykładnik, ale to i tak są wyniki ograniczone.
Nie istnieją sposoby zapisu liczby dowolnej długości w sposób jednoznaczny i dokładny w pamięci komputera. Wystarczy wziąć po uwagę \(\displaystyle{ \sqrt{2}}\) lub \(\displaystyle{ \pi}\) . Liczby te posiadają nieskończenie wiele miejsc po przecinku i nie istnieje ogólny sposób rozwiązania takiej trudności jak zapisanie ich dokładnej wartości.

ODPOWIEDZ