Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++]Conversione in binario

    Ho scritto il seguente prog x convertire i numeri nei vari sistema(esandecimale, binario, ottale) .................... ma mi da sempre e solo 0
    codice:
    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    
    using namespace std;
    
    int ( *pf )( int ); // a function pointer
    int bin( int ); // a bynari conversion
    int esa( int ); // a esandecimal conversion
    
    int main( int argc, char *argv[] )
    {
        pf = bin;
        cout << pf( 938 )<<"\n";
        system( "PAUSE" );	
        return 0;
    }
    /* this function convert a decimal number into a binary corrispondent */
    int bin( int arg1 )
    {
        int binary = arg1 % 2;
        while( binary )
        {
            binary = binary + bin(binary); 
            if( binary == '\0' )
            break;   
        }
        return binary;
    }
    Tnk 1000k a che mi dice ndo sbaglio
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    secondo me dovresti rivedere un po' il tuo codice...
    ti ridà sempre zero perchè:
    codice:
        int binary = arg1 % 2;
        while( binary )
    perchè la prima espressione ti da il resto della divisione di 2 (che per un numero pari è 0), perciò nemmeno entra nel ciclo while...
    Ma anche se provassi con un numero dispari mi sa che le cose non vanno come credi...
    Poi alla fine fai il controllo con un char (per la chiusura di stringhe)...ma non dovresti definire da qualche parte che stai lavorando con stringhe?....altrimenti fai solo delle somme tra 1 e 0 (sempre se riesci)...giusto?

    cmq, mi pare ci sia una libreria in C++ che ti permetta di lavorare facilmente con i valori binari:

    codice:
    #include <iostream>
    #include <bitset>
    
    int main(){
        bitset<20> binario(938);
        cout << binario << endl;
        return 0;
    }
    per gli ottali e gli esadecimali, ci sono poi i manipolatori per gli stream...
    Certo, se il tuo scopo è scriverti l'algoritmo di conversione queste non sono le strade che devi seguire, cmq spero d'averti aiutato.

    ciauz
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  3. #3
    volevo scrivermi gli algoritmi x imparare bene le conversioni!

    per gli ottali e gli esadecimali, ci sono poi i manipolatori per gli stream...
    cosa intendi?
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    633
    Originariamente inviato da Luc@s
    volevo scrivermi gli algoritmi x imparare bene le conversioni!


    cosa intendi?
    ah ok, allora prendi in considerazione solo la prima parte del mio primo post.
    Per quanto riguarda i manipolatori, sicuramente li avrai usati (senza magari sapere che si chiamavano così), come ad esempio:
    codice:
    cout << endl;
    endl è un manipolatore.
    Per quanto riguarda le conversioni, i manipolatori da usare sono ad esempio:
    codice:
        int a = 1234;
        cout << hex << a << endl;
        cout << oct << a << endl;
        cout << dec << a << endl;
    ce ne sono altri:
    http://www.cppreference.com/cppio_flags.html

    ciauz
    Alcuni miei articoli in PRO.HTML.IT: JavaScript | DHTML | DOM
    Sviluppo : wedev | forum

  5. #5
    binary
    codice:
    int dec=65, bin[8]; //(0...255)
    
    while(dec>0)
    {
        if(dec%2)
            bin[i]=1;
        else 
            bin[i]=0;
        dec/=2;
        i++;
    }
    
    for(i--; i>=0; i--)
        cout << bin[i] << endl;
    oppure utilizzi gli operatori bitwise:
    codice:
    /* Orig. Inviato da The Great World */
    
    char *retbin(long a)
    { 
        long b = a; 
        int i; 
        char *str; 
        for (i = 0; b; b >>= 1, i++)
            ;
    
        str = (char*)calloc(i, sizeof(char)); 
    
        do
        {
            str[i-- - 1] = (a & 1) + '0'; 
            a >>= 1;
        } while (a); 
    
        return str; 
    }
    ...Terrible warlords, good warlords, and an english song

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.