Wątek przeniesiony 2020-11-30 20:30 z PHP przez Koziołek.

Dodawnia liczb binarnych

0

Dane są dwie liczby binarne. Podaj wynik ich dodawania. Jak to zrobić? C++
Muszę zamienić te liczby binarne na dziesiętne dodać je i zamienić na binarną.

1

Musisz zamienic liczbe na lancuch znakow, potem kazda jedynke z tego lancucha znakow zamienic na 2 do odpowiedniej potegi i dodawac do siebie. W ten sposob dostaniesz liczby w systemie dziesietnym. Dodajesz je, a nastepnie wynik zamieniasz na binarna, dzielac przez 2 i sprawdzajac reszte z dzielenia, jesli 1 to 1, jesli 0 to 0

14 % 2 = 0
7 % 2 = 1
3 % 2 = 1
1 % 2 = 1

14 = 0111

1101 = 2^0 + 2^1 + 0^2 + 2^3 = 11

0

@RezyserKinaAkcji: Tylko co to jest lancuch?

3

W pamięci komputera liczby zawsze są binarne, więc nie chcesz zamieniać ich na dziesiętne ;​)

Rozumiem, że chcesz wprowadzić do programu np. 1111 i 1 i uzyskać wynik 10000.

Najłatwiej to osiągnąć używając std::bitset: https://en.cppreference.com/w/cpp/utility/bitset
Tak na szybko:

    bitset<32> a("1111");
    bitset<32> b("1");

    cout << bitset<32>(a.to_ulong() + b.to_ulong());
0

@kq: Ale ja chcę to zrobić bez bitset. Chcę wczytać cyfry tej liczby binarnej do tablicy

3

Ja bym spróbował to zrobić bitowo.
Robisz pętlę.
W pętli sprawdzasz co jest na danej pozycji.
Jak jest np. 1 i 0 to suma bitowa tego będzie wartością z bitowego OR czyli:
1&0 =1
Jeśli natomiast wystąpi 1 i 1 to musimy zwrócić 0 i przenieść do pamięci 1.
Tak jakby dodawać te liczby w systemie dwójkowym na kartce.

0

Chciałam policzyć ilość cyfr w liczbie, stworzyć 2 tablice o długości liczb, zamienić liczby na dziesiętne, dodać je i zamienić wynik na liczbę binarną. Pomoże ktoś?

@jurek1980: Wiem o co chodzi, ale zamieniając liczby na dziesiętne jest chyba łatwiej. (chodzi o to żeby nie było nic z bitami)

0

@Kinga6213: Ja moge Ci napisac jak to zrobic krok po kroku, ale jak to sie robi, musisz sprawdzic sama w internecie, bo inaczej nie bedzie mialo to zadnej wartosci edukacyjnej.

Bierzesz liczbe binarna i zamieniasz na String
Stringa zamieniasz na tablice znaków
Tworzysz pętlę w której iterujesz po elementach tablicy zaczynając od indexu 0. Jeśli w danej pozycji jest 1, to w tym miejscu podnosisz do potęgi 2^index, jeśli 0, to nie robisz nic.
typu
1 = 2 ^ index
0 = 0 ^ index
1 = 2 ^ index
itp itd. Index podnosisz o 1 po kazdej iteracji. Wszystkie wyniki ze soba sumujesz i wychodzi Ci liczba dziesietna
Robisz to samo z druga liczba
Dodajesz obie liczby do siebie
Dzielisz liczbe przez 2 i sprawdzasz reszte z dzielenia. Jesli wynik to 1, to zapisujesz 1, jesli 0, to zapisujesz 0, wyniki łączysz ze sobą tworząc ciąg znaków. W ten sposób z liczby np 15 dostajesz 1111, bo :
15 % 2 = 1
7 % 2 = 1
3 % 2 = 1
1 % 2 = 1

Tadam

0

@Kinga6213:

Chciałam policzyć ilość cyfr w liczbie, stworzyć 2 tablice o długości liczb, zamienić liczby na dziesiętne, dodać je i zamienić wynik na liczbę binarną

Po co Ci to skoro musisz zmienić je na dziesiętne, dodać i wrócić do stringa binarnego. Jedynym problemem jest zmiana bin -> dec i dec -> bin; tego znajdziesz pełno w internecie.

0

TL;DR pytanie jaki jest limit dlugosci tych liczb?

3

@Kinga6213:
Chyba już 40 lat nie ma maszyn, które robią obliczenia w systemie dziesiętnym (a o zgrozo był takie i nawet x86 ma rozkazy wspierające taką funkcjonalność - kod BCD).
Jesteś w pułapce umysłowej związanej z faktem, że ludzi się uczy liczyć w systemie dziesiętnym. Komputery obecnie używają do obliczeń tylko i wyłącznie systemu binarnego.
Ergo twój problem sprowadza się do:

  1. wczytania liczb w zapisie binarnym jako tekst
  2. Wykonania konwersji tekstu z zapisem binarnym do zmiennej int (która używa systemu binarnego)
  3. Dodania
  4. Wykorzeniania konwersji int do tekstu w reprezentacji binarnej
  5. Wypisania tekstu

Liczby dziesiętne nie mają tu nic do rzeczy.

0
MarekR22 napisał(a):

Ergo twój problem sprowadza się do: ...

50/50 Może jednak się mylisz, zaś problem sprowadza się do:

  • wczytania liczb w zapisie binarnym jako tekst
  • zaimplementowaniu oraz uruchomienia algorytmu dodawania (jak na kartce ręcznie).
  • wypisania wynikowego tekstu

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