Skocz do zawartości
gofeer

Mnozenie 2 liczb w systemie Q7

Rekomendowane odpowiedzi

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";

 

}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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ś:?:)...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...