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

[C++] Niezrozumiały zapis

Ostatnio zmodyfikowano 2016-02-24 06:13
Autor Wiadomość
Lero
Temat założony przez niniejszego użytkownika
[C++] Niezrozumiały zapis
» 2016-02-23 22:34:27
Witam. Znalazłem taki kod, który ma przeliczać liczby Dec na Bin. Wyjaśni mi ktoś jak on działa?
C/C++
string DecToBin2( int number )
{
    string result = "";
   
    do
    {
        if(( number & 1 ) == 0 )
             result += "0";
        else
             result += "1";
       
        number >>= 1;
    } while( number );
   
    reverse( result.begin(), result.end() );
    return result;
}
Chodzi mi głownie o zapis (number & 1) == 0
P-145235
Garniturek
» 2016-02-23 23:14:40
ten warunek sprawdza czy 'number' jest równy 0. & to mnożenie logiczne. wszystko razy 0 da zero i tylko wtedy. Jeśli się mylę niech ktoś poprawi :D
P-145240
pekfos
» 2016-02-24 00:10:09
Koniunkcja bitowa z 1 wyciąga z liczby wartość jej najmłodszego bitu.
P-145241
mateczek
» 2016-02-24 06:13:53
C/C++
#include <iostream>
#include<string>
#include<algorithm>

using namespace std;

string DecToBin2( int number ) {
    string result = "";
    do {
        result +=( number & 1 ) + '0'; //może być number%2 tak czy siak uzyskasz resztę modulo czyli ostatnią cyfrę
        number >>= 1; // dzielisz przez dwa aż z liczby nic nie zostanie
    } while( number );
   
    reverse( result.begin(), result.end() );
    return result;
}


//zamiana (wyświetlenie liczby w dowolnym systemie)

string func( int number, int base ) {
    string result = "";
    do {
        int cyfra = number % base; //dla systemu dwójkowego masz wybór albo dzielisz %2
        if( cyfra >= 10 ) // if potrzebny by przejść z cyfr na litery dla systemów większych niż dziesiętne
             result +=( cyfra - 10 ) + 'A';
        else
             result += cyfra + '0';
       
        number /= base; // dzielenie przez 2 to inaczej >>= 1 rotacja bitowa w prawo
    } while( number );
   
    reverse( result.begin(), result.end() ); //odwrócenie znaków
    return result;
}






int main()
{
    int numer = 199;
    cout << DecToBin2( numer ) << endl;
    cout << func( numer, 2 ) << endl;
    cout << func( numer, 10 ) << endl;
    cout << func( numer, 8 ) << endl;
    cout << func( numer, 16 ) << endl;
    cout << func( numer, 20 ) << endl; //system dwódziestkowy :P
}
P-145242
« 1 »
  Strona 1 z 1