Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Programma inverte bit
Forum - C/C++ - Programma inverte bit

Avatar
stefano_decarlo (Normal User)
Newbie


Messaggi: 4
Iscritto: 07/11/2006

Segnala al moderatore
Postato alle 20:34
Venerdì, 01/12/2006
Salve, avrei atroci difficolta' circa il seguente problema.
La traccia dice:

Si invertano i bit di una variabile unsigned long e si stampi il numero di bit “1” in quella variabile.

La soluzione e' la seguente:

#include <stdio.h>

main (){
int i;
int sum = 0;
unsigned long inv = 0;
unsigned long var = 7;

for (i = 0; i < 32 ; i++){
     if((var & 1) == 1){
        sum++;
        inv += 1;
        }
      var <<= 1;
      inv >>= 1;
}

printf("Ris: %d %d\n", inv, sum);
}

Bene, provato sul dev, non da risultati corretti.
Mi sapreste dire dov'è l'errore?
Inoltre, nell'if viene eseguito un and bit a bit... Ma l'& viene applicato al bit piu' alto oppure più basso?
Ancora: se var = 2(in dec) = 10(in bin), sara' 10&01 = 0, oppure 10 & 1 = 1?
Ahime...sono disperato, aiutatemi!:d

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 23:54
Venerdì, 01/12/2006
Testo quotato


Si invertano i bit di una variabile unsigned long e si stampi il numero di bit “1” in quella variabile.



Il primo passo è semplice  

Codice sorgente - presumibilmente C++

  1. unsigned long var = 7;
  2. unsigned long inverse_bits = ~var;



Ma il secondo "si stampi il numero di bit “1” in quella variabile" sinceramente non riesco a capire cosa significhi.


Il mio blog: https://piero.dev
PM Quote
Avatar
stefano_decarlo (Normal User)
Newbie


Messaggi: 4
Iscritto: 07/11/2006

Segnala al moderatore
Postato alle 9:49
Sabato, 02/12/2006
significa che, se ad esempio, var fosse stata pari a 2, nella variabile sum alla fine dovrei avere il valore 1, dato che 2 = 10 (dec -> bin), quindi un solo bit pari ad 1.

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 18:45
Sabato, 02/12/2006
Prova con:

Codice sorgente - presumibilmente C++

  1. unsigned long var = 7;
  2. unsigned long inverse_bits = ~var;
  3. unsigned int sum = 0;
  4.  
  5. for (register int c = 0; c<sizeof(inverse_bits); c++){
  6.   if ((inverse_bits & 0x01) == 0x01) sum++;
  7.   inverse_bits >>= 1;
  8. }
  9.  
  10. // Attenzione che ora inverse_bits è stato modificato!
  11.  
  12. printf("Ris: %ud\n", sum);


Ultima modifica effettuata da pierotofy il 02/12/2006 alle 18:52


Il mio blog: https://piero.dev
PM Quote