Использование побитового оператора & и + в Java дает противоречивые результаты

Может кто-нибудь объяснить, почему эти две части Java-кода ведут себя по-разному? Первый правильно подсчитывает количество битов, а второй просто отображает 1 или 0 для ненулевых чисел. Я не понимаю, что происходит.

    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);
    }

Ответы на вопрос(3)

Ваш ответ на вопрос