gofeer Opublikowano 12 Listopada 2004 Zgłoś Opublikowano 12 Listopada 2004 Potrzebuje napisac program ktory mnozy dwie liczby w systemie Q7(7 bitow tworzy cyfre bit 8 to bit znaku), liczby wprowadzamy z klawiatury(zwykle dziesietne) nastepnie program sprawdza czy sa dodatnie czy ujemne jesli liczba jest ujemna to zamienia na dodatnia i mnozy je jako dodatnie a dopiero wynik jest zamieniany na ujemna i to chyba tyle w skrocie, tutaj wstawiam co sam wymyslilem ale to nie dziala do konca poprawnie bo np 64*64 = 32 i to wyswietla poprawnie ale juz np 192*32 =240 a program wyswietla co innego #include <iostream.h> short int a,b,c,mask=128,mask1=255; void main() { cout << "Podaj liczbe a: "; cin >> a; cout << "Podaj liczbe b: "; cin >> b; if ((a&mask)==128) { a--; a=~a; a=(a&mask1); if ((b&mask)==128) { b--; b=~b; b=b&mask1; c=a*b; c=~c; c++; c=c >> 7; } else {c=a*b; c=~c; c++; c=c >> 7; } } else { if ((b&mask)==128) { b--; b=~b; b=b&mask1; c=a*b; c=~c; c++; c=c >> 7; } else c=a*b; c=c >> 7; } cout << "Wynik (w Q7) = " << c <<"n"; } Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
marcinEc Opublikowano 14 Listopada 2004 Zgłoś Opublikowano 14 Listopada 2004 Potrzebuje napisac program ktory mnozy dwie liczby w systemie Q7(7 bitow tworzy cyfre bit 8 to bit znaku), liczby wprowadzamy z klawiatury(zwykle dziesietne) nastepnie program sprawdza czy sa dodatnie czy ujemne jesli liczba jest ujemna to zamienia na dodatnia i mnozy je jako dodatnie a dopiero wynik jest zamieniany na ujemna i to chyba tyle w skrocie, tutaj wstawiam co sam wymyslilem ale to nie dziala do konca poprawnie bo np 64*64 = 32 i to wyswietla poprawnie ale juz np 192*32 =240 a program wyswietla co innego [...] Szczerze mówiąc nie mam pojęcia co Twój program ma realizować, i co rozumiesz jako system Q7, ale po zachowaniu programu mogę stwierdzić, że ta cała gimnastyka binarna nie jest potrzebna i wystarczy taki programik: [php:1:d59351e5fe] #include <iostream> using namespace std; int main() { int ia,ib; cout << "Podaj liczbe a: "; cin >> ia; cout << "Podaj liczbe b: "; cin >> ib; signed char a = ia; signed char b = ib; signed int iw = (a*B) / 128; unsigned char w = iw; cout << (int)w; } [/php:1:d59351e5fe] No niestety trzeba bardzo zwracać uwagę na typ zmiennej żeby obliczenia były prawidłowe. Program daje w wyniku 64*64=32 i 192*32=240, tylko powiedz mi co oznaczają te wyniki, bo jakoś nie mogę ich do niczego dopasować (:idea: ułamki stałoprzecinkowe czy coś:?:)... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
gofeer Opublikowano 15 Listopada 2004 Zgłoś Opublikowano 15 Listopada 2004 dzieki za ten pomysl skorzystam, ale musze to zrobic wykorzystujac operatory bitowe bo taki byl cel cwiczenia. A jesli chdzi o system xQy no to x to czesc calkowita a y to czesc ulamkowa, czyli w systemi Q7 wykorzystujemy 8 bitow 1 to bit znaku pozostale siedem to bity liczby i tak 1 od lewej z tych siedmiu to 2^-1 nastepny 2^-2 i td czyli np 01000000(64dziesietnie) oznacza w tym sytemi 0,5 no tak jak pomnozysz 64*64 otrymujesz 32 czyli 0,5*0,5=0,25[dzies] z liczbami o przeciwnych znakach tzreba pokabinowac troche wiecej Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...