Algorytm dodawania w U2

0

Witam. Dopiero zaczynam przygodę z programowaniem w C. Nigdy nie miałam z tym większej styczności i chce nadrobić straty. mój problem polega teraz na tym by zrobić program dodawania liczb w U2. Pisemnie na kartce umiem, ale nie mam pomysłu jak zrobić do tego program. Jakieś podpowiedzi?? Z góry dzięki.

0

Deklarujesz dwie tablice na liczby i zmienne na Overflow i Carry. Przy dodaniu odpowiednich indeksów rozpisujesz ify czy wystąpi przeniesienie, które później uwzględniasz przy kolejnym dodawaniu. Jeśli wystąpiło przeniesienie na pozycję więcej niż n-bitową (gdzie n to maksymalny rozmiar tablicy) to odnotowujesz przepełnienie.

Wiesz jak jest na kartce, to z programowaniem też sobie poradzisz.

0

A o co chodzi z " zmienne na Overflow i Carry"? I jak mam w tym if'ie rozpisać ten warunek na przeniesienie?
0+0 to 0 , 0+1=1 , 1+0 = 1 , a 1+1 = 0 i przeniesienie "1" do starszego bitu.

0

Masz na wiki zaprezentowany sumator. Przełóż to na C i zakoduj.

2

Ja nie rozumiem pytania! Przecież, u2 jest obecnie stosowane dla liczb całkowitych praktycznie przez wszystkie procesory.
Nie ma co tu kodować, symulować, bo wszystko jest już zrobione.
Nic tylko zrobić zwykłe dodawanie i odpowiednio zaprezentować wyniki.

Może lepiej opisz co chcesz uzyskać: co użytkownik ma podawać ne wejściu i co ma zobaczyć na wyjściu.

0

zamiana dziesietnego na U2, uzytkownik ma prowadzac dwie liczby w dziesietnym systemie i mam ja zamienic na U2. Ten moment mam. Nastepnie mam zsumowac liczby w U2, pokazujac czy wystapilo przepelnienie czy nie. I nie wiem jak mam zrobic te przeniesienia, ze 1+1=0 i jedynka do nastepnego bitu

0
  1. Robisz to źle, bo @MarekR22 powiedział Ci jak to rozwiązać.
  2. Jeśli dalej upierasz się przy robieniu tego bitowo to masz:

Pozwolisz, że przepiszę to co jest na Wiki w czytelniejszy sposób:

Masz policzyć

a + b = s + c

Gdzie s to suma a c to przeniesienie.

a b s
1 1 0
1 0 1
0 0 0
0 1 1
a b c
1 1 1
1 0 0
0 0 0
0 1 0

Teraz skup się i spróbuj sobie przypomnieć jakie funkcje bitowe się tak zachowują, by Ci jeszcze bardziej ułatwić wypiszę Ci twoje opcje:

  • koniunkcja, zwana bitowy i (AND)
  • alternatywa, zwana bitowym lub (OR)
  • alternatywa wykluczająca, bitowe albo … albo … (XOR)

Z tego spróbuj już wydedukować co i jak. Prościej już nie potrafię Ci tego wytłumaczyć.

0

@MarekR22 dokładnie, do zobrazowania wystarczy odpowiednio przedstawić binarnie liczbę(bit 7, 15, 31 lub 63 zależnie od zmiennej int8, 16,32,64 odpowiada za znak), technik jest co niemiara:
http://stackoverflow.com/questions/111928/is-there-a-printf-converter-to-print-in-binary-format

Najkrótsza w formie przez rekurencje:

void bin(int n)
{
 /* step 1 */
 if (n > 1)
     bin(n/2);
 /* step 2 */
 printf("%d", n % 2);
}

albo gotowca C z itoa:

char buffer [33];
itoa (value,buffer,2);
printf ("\nbinary: %s\n",buffer);

albo jedna linijka C++:

std::cout << std::bitset<sizeof(num) * 8>(num);

Do wprowadzenia np. http://www.cprogramto.com/convert-binary-to-decimal-c-code/
Operacja sumy sprowadzi się do jednej instrukcji procesora kwestia wyłącznie wyświetlenia w postaci binarnej.
Wyświetlona liczba będzie U2 jeśli zmienna będzie "signed" najstarszy bit będzie bitem znaku.

Ale obawiam się że nie o takie cudo chodziło nauczycielowi :/
Bramka 2. Wyprodukować sumator 1 bitowy i w 32 iteracjach przeprowadzić sumowanie plusem że można przedstawić sumowanie w formie animacji. Potrzebne dwie funkcje and(dla przeniesienia) i add(z przeniesieniem poprzedniej iteracji) krok po kroku zapamiętując przeniesienie z poprzedniego kroku.
Możesz wówczas operować nawet na tablicach char[33] bez żadnej konwersji wprowadzić i wyświetlić;

(dodam kod póxniej)

http://zto.ita.pwr.wroc.pl/~luban/uklady_kom/sum/sum.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1