C: funzioni con operatori bit a bit

di il
2 risposte

C: funzioni con operatori bit a bit

La funzione conta il numero di 1 presenti nella rappresentazione binaria di un intero n. se la provo con 3 funziona se la provo con -3 o qualsiasi altro numero negativo non si arresta.
int f(unsigned int n) {
int c = 0;
for (; n ; n >>= 1)
c = (n & 0x01)? c+1: c;
return c;
}
AVEVO PENSATO DI RISOLVERE COSÌ:
#include <stdio.h>
#include <stdlib.h>

int f(unsigned int n);

int main()
{
unsigned int n;
int h;

scanf("%u",&n);
h=f(n);
printf("%d\n",h);
 
return 0;
}

int f(unsigned int n) {
int c = 0;
for (; n ; n >>= 1)
c = (n & 0x01)? c+1: c;
return c;
}
ma il problema è che mi va a stampare altri numeri. Può dipendere dalla rappresentazione che fa il processore??

2 Risposte

  • Re: C: funzioni con operatori bit a bit

    Il problema è che quando shifti il bit di segno (il bit più significativo) viene preservato (a 1 se l'intero è negativo) per cui non raggiungerai mai n==0.
    Ti consiglio di lavorare sempre con unsigned quando fai degli shift: es.:
    int f(int n) {
    int c = 0;
    unsigned int temp = (unsigned int)n; 
    for (; temp ; temp >>= 1)
    c = (temp & 0x01)? c+1: c;
    return c;
    }
  • Re: C: funzioni con operatori bit a bit

    Grazie
Devi accedere o registrarti per scrivere nel forum
2 risposte