Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Przesunięcie w systemie binarnym

Ostatnio zmodyfikowano 2016-12-08 20:56
Autor Wiadomość
CCbolt
Temat założony przez niniejszego użytkownika
Przesunięcie w systemie binarnym
» 2016-12-05 13:16:35
Mam problem z przesunięciem przy dodawaniu liczb binarnych dwie liczby czy trzy nie stanowią problemu, dodawanie zreszta robię na zasadzie sumowania i dodawania kolejnej liczby, dłuższe ale proste.
Problem pojawił się przy mnożeniu większej ilości liczb, na samym końcu muszę je zsumować no i sposób w jaki ja sumuję się do tego nie nadaje.

Może ktoś mi objaśnić przesunięcia gdy mamy większą ilość liczby ( dwie jedynki to 10, 1+1+1 =11, 1+1+1+1=100 kumam ale przy zapisie się gubię ) i bez stawiania X jedynek w następnym rzędzie?

np  na 111 + 101 + 111 + 111 + 111 + 101.
P-154530
mateczek
» 2016-12-05 14:53:15
A masz jakiś wyraźny powód by bujać się z przesunięciami ?? I takim dodawaniem ?? Nie możesz po prostu napisać funkcji, która string binarny skonwertuje Ci do liczby int?? Inaczej mówiąc chodzi funkcję, która poprawnie wczyta ci liczbę int zapisana w postaci stringa w postaci binarnej.
C/C++
#include <iostream>
#include <string>

using namespace std;

//zamiana napisu na liczbę
int strToBin( string l ) {
    int liczba = 0;
    for( size_t i = 0; i < l.size(); i++ ) {
        liczba =( liczba << 1 ) +( l[ i ] - '0' ); // te strzałki "<<" to przesunięcie w lewo o jeden bit. Odpowiada to mnożeniu przez 2
    }
    return liczba;
}

//zamiana liczby na napis
string intToBinStr( int liczba ) {
    string napis { "" };
    while( liczba ) {
        bool cyfra = liczba & 1; //iloczyn logiczny z jedynką. jeśli bit==1 to wynik=1. A jeśli bit==0, to i wynik =0
        napis.insert( napis.begin(), cyfra + '0' );
        liczba = liczba >> 1; //te strzałki ">>" to przesunięcie w prawo o jeden bit. Odpowiada to dzieleniu przez 2
    }
    return napis;
}

int main()
{
    string bin1, bin2;
    cin >> bin1 >> bin2;
    int liczba1 = strToBin( bin1 );
    int liczba2 = strToBin( bin2 );
   
    cout << intToBinStr( liczba1 * liczba2 ) << endl;
   
}


możesz również skorzystać z klasy std::BitSet
P-154533
CCbolt
Temat założony przez niniejszego użytkownika
» 2016-12-08 15:22:30
Tak, koło z dyskretne ale już to ogarnąłem.
P-154662
mateczek
» 2016-12-08 16:03:48
koło z dyskretnej i bujać się z dodawaniem na stringach?? :P Toć komputerowi "ganz egal" jakie liczby dodaje. Czy jest to: 10(dex), A(hex), 1010(bin) w pamięci komputera wyglądają tak samo :) notabene ALU (np. sumator) w procku działa na liczbach binarnych(ma to natywnie i w dodatku sprzętowo). To tak jakbyś uczył ojca jak się dzieci robi:P
P-154668
CCbolt
Temat założony przez niniejszego użytkownika
» 2016-12-08 16:46:26
Życie, powiem ci że się przydaje. Inaczej patrzę na niektóre sprawy. Matematyka, algebra liniowa i grafy na pewno się przydadzą.
P-154669
mateczek
» 2016-12-08 20:56:41
spoko. Ja też robiłem projekty sumatora binarnego w technikum tyle, że na bramkach. i chyba tylko 4 bitowy. Wiedzieć trzeba jak się to robi. Tylko chciałem zwrócić uwagę, że system liczb w informatyce nie ma znaczenia. Bo liczba i tak wygląda tak samo. Cała zabawa polega na tym by ją poprawnie do pamięci wczytać. A jak się już znajdzie w pamięci to procesor sam se ją doda 
P-154676
« 1 »
  Strona 1 z 1