ho bisogno di fare un programma che conta il numero di 1s nella rappresentazione binaria di un numero senza segno, utilizzando una funzione ricorsiva, quindi questo è il mio codice:Numero di 1s in un numero binario
#include <stdio.h>
#include <stdlib.h>
int one(unsigned n);
int main()
{
unsigned n;
printf("n= "); scanf("%u", &n);
printf("%d", one(n));
printf("\n");
return 0;
}
int one(unsigned n)
{
if(n==1 || n==0)
return n;
else
return (n&1+one(n>>1));
}
Thing è, il mio codice funziona per il numero 7
per esempio, ma se inserisco il numero 2
verrà stampato che contiene 2
. E per 4
restituisce 0, e penso che per tutti gli esponenti di 2 restituisca 0 alla fine. Non riesco a capire perché.
La prima cosa che proverei è ripulire i valori restituiti e così via. Stai restituendo un int firmato, passando in qualcosa di non firmato? Quindi .. idealmente, tieni tutto senza firma quando esegui la manipolazione bit a bit. Puoi farlo in entrambi i modi, ma è più facile sapere con certezza che stai facendo quello che pensi di fare ... se questo ha senso. Come parte di ciò, dovresti stampare un% u su entrambe le linee. Facci sapere se continui ad avere un problema dopo aver ottenuto tutti i tuoi argomenti in unsigned –
Provato e lo stesso risultato. – Nebeski
http://en.cppreference.com/w/c/language/operator_precedence –