Potenza di 2

di il
10 risposte

Potenza di 2

Ciao a tutti
devo fare un programmino per verificare che un numero sia una potenza di due ...
il mio primo pensiero è stato quello di fare un ciclo con for con divisioni varie del tipo ;
prendo un intero e lo divido per 2, se il resto è 0 continuo a fare questa operazione fin quando il risultato diventa 1 (non il risultato del % ma del /) , il problema è che non sono riuscito a far andare di pari passo le due operazioni ; dopo di che mi è venuto in mente di prendere il numero che devo verificare , trasformarlo in binario e controllare se ci fosse più di un 1.
se c' è più di un 1 allora mi deve restituire false altrimenti se c'è un solo 1 mi restituisce true...
il problema è che concettualmente ci sono ma ad applicare questo ragionamento non ci riesco proprio ...
please help me

10 Risposte

  • Re: Potenza di 2

    Puoi utilizzare una maschera e un AND.
    Utilizzi una variabile
    unsigned char mask = 0x01
    che ha un unico bit, quello più a destra, a 1. Eseguendo un AND tra la tua stringa di byte
    unsigned char byte = ...
    e la maschera, verifichi se il bit più a destra è uguale a 1: in tal caso, incrementi un contatore.
    Fatto ciò, esegui uno shift a sinistra di mask:
    mask = mask << 1
    spostando in tal modo a sinistra la posizione del bit da verificare. Ripeti il tutto finché avrai analizzato tutti bit della stringa.
    Una cosa del genere:
    unsigned char byte = ...;
    unsigned char mask = 0x01;
    int count = 0;
    do{
        if((byte & mask) != 0)
            count++;
       mask = mask << 1;
    }while(mask != 0x00);
  • Re: Potenza di 2

    Hmmm nn saprei ...
    il problema è che devo attenermi al programma che abbiamo fatto all'università e fino ad adesso non ho mai sentito parlare delle maschere
    devo trovare un'altra soluzione
  • Re: Potenza di 2

    Beh, come hai detto tu puoi semplicemente continuare a dividere per due, e verificare se il resto finale è 1. Prova a scrivere un po' di codice e vediamo come aiutarti
  • Re: Potenza di 2

    Ti dico già cge il programma in questo modo non funziona ma io facevo una cosa del genere

    cin >> A ;
    while (A != 1 ){
    if ( A % 2 == 0){
    A / 2 == B ;
    B=A;
    //faccio così per assegnare di nuovo il valore di B ad A in modo da far rifare il ciclo ma non me lo fa fare
  • Re: Potenza di 2

    A / 2 == B
    Cosa fai con questa istruzione?
    Prima di iniziare a scrivere un programma, bisogna studiare le basi della programmazione e del linguaggio che vuoi utilizzare..

    P.S.: utilizza i tag code.
  • Re: Potenza di 2

    tuixte ha scritto:


    A / 2 == B
    Cosa fai con questa istruzione?
    Prima di iniziare a scrivere un programma, bisogna studiare le basi della programmazione e del linguaggio che vuoi utilizzare..

    P.S.: utilizza i tag code.

    con questa istruzione intendevo dire che A / 2 è uguale a B
  • Re: Potenza di 2

    Il doppio uguale è l'operatore di confronto, quell'istruzione non fa ciò che pensi..
    Prima di passare al codice, scrivi in italiano precisamente ogni passo che il programma deve fare.
  • Re: Potenza di 2

    È proprio questo che non riesco a fare... io sto cominciando adesso a imparare a "programmare "... mi rendo conto che non sto facendo chissà che programmi complicati ma non avendo le basi non riesco a trovare una guida appropriata da seguire
  • Re: Potenza di 2

    Non bisogna gettarsi subito nello scrivere codice.. Prendi un buon libro e studia le basi della programmazione del linguaggio che vuoi utilizzare, poi inizia a scrivere.
    Per produrre un codice, bisogna prima aver ben chiaro cosa tale codice andrà a fare e come lo andrà a fare, e a te questo manca.
    Ripeto, prendi carta e penna e prova a scrivere in italiano tutti i passi da effettuare.
  • Re: Potenza di 2

    Va bene grazie
Devi accedere o registrarti per scrivere nel forum
10 risposte