Oppure

Loading
01/12/06 19:34
stefano_decarlo
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
aaa
01/12/06 22:54
pierotofy
Si invertano i bit di una variabile unsigned long e si stampi il numero di bit “1” in quella variabile.


Il primo passo è semplice

unsigned long var = 7;
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: piero.dev
02/12/06 8:49
stefano_decarlo
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.
aaa
02/12/06 17:45
pierotofy
Prova con:

unsigned long var = 7;
unsigned long inverse_bits = ~var; 
unsigned int sum = 0;

for (register int c = 0; c<sizeof(inverse_bits); c++){
  if ((inverse_bits & 0x01) == 0x01) sum++;
  inverse_bits >>= 1;
}

// Attenzione che ora inverse_bits è stato modificato!

printf("Ris: %ud\n", sum); 
Ultima modifica effettuata da pierotofy 02/12/06 17:52
Il mio blog: piero.dev