Usando bitwise & operator y + en Java dando resultados inconsistentes

¿Podría alguien explicar por qué estos dos códigos de Java se comportan de manera diferente? El primero cuenta correctamente el número de bits, pero el segundo solo muestra 1 o 0 para los números que no son cero. No entiendo qué está pasando.

    public static void printNumUnitBits(int n){
    int num=0;
    for(int i=0;i<32;i++){
        int x=n&1;
        num=num+x;
        n=n>>>1;
        }
     System.out.println("Number of one bits:"+num);
    }

    public static void printNumUnitBits(int n){
    int num=0;
    for(int i=0;i<32;i++){
        num=num+n&1;
        n=n>>>1;
        }
     System.out.println("Number of one bits:"+num);
    }