<?php

function hitungNomorBit(int $angka, int $nomorBit): ?int {
    if ($angka < 0 || $nomorBit < 0) return null;

    // Konversi ke biner manual, hasil MSB → LSB
    $biner = [];
    while ($angka > 0) {
        array_unshift($biner, $angka % 2);
        $angka = intdiv($angka, 2);
    }

    $panjang = count($biner);

    // Jika nomorBit lebih dari panjang biner
    if ($nomorBit >= $panjang) {
        return null;
    }

    // Hitung index dari kiri: posisi = panjang - 1 - nomorBit
    $startIndex = $panjang - 1 - $nomorBit;

    // Hitung jumlah 1 dari index itu sampai ke kiri
    $jumlah = 0;
    for ($i = $startIndex; $i >= 0; $i--) {
        if ($biner[$i] === 1) {
            $jumlah++;
        }
    }

    return $jumlah;
}

// Format output seperti soal
function tampilkanHasil($angka, $bit) {
    $hasil = hitungNomorBit($angka, $bit);
    if ($hasil === null) {
        echo "hitungNomorBit($angka, $bit) = NULL\n";
    } else {
        echo "hitungNomorBit($angka, $bit) = $hasil\n";
    }
}

// Tes sesuai soal
tampilkanHasil(13, 0); // => 1
tampilkanHasil(13, 1); // => 3
tampilkanHasil(13, 2); // => NULL
