def hitungNomorBit(angka, nomorBit):
# Langkah 1: Validasi input untuk nomorBit.
# Jika bukan 0 atau 1, maka input tidak valid.
if nomorBit != 0 and nomorBit != 1:
return None
# Langkah 2: Menangani kasus khusus untuk angka 0.
# Representasi biner dari 0 adalah '0'.
if angka == 0:
if nomorBit == 0:
return 1
else:
return 0
# Langkah 3: Menyiapkan variabel untuk proses perhitungan.
jumlah_bit = 0
sisa_angka = angka
# Langkah 4: Melakukan loop konversi sambil menghitung.
# Loop ini akan berjalan sampai tidak ada lagi yang bisa dibagi.
while sisa_angka > 0:
# Mendapatkan bit terakhir dari angka saat ini menggunakan modulo 2.
bit_sekarang = sisa_angka % 2
# Memeriksa apakah bit yang ditemukan sesuai dengan yang dicari.
if bit_sekarang == nomorBit:
jumlah_bit += 1
# Memperbarui angka untuk iterasi selanjutnya dengan pembagian integer.
sisa_angka = sisa_angka // 2
# Langkah 5: Mengembalikan hasil akhir perhitungan.
return jumlah_bit
# --- Pengujian Kode ---
# Saya melakukan beberapa pengujian untuk memastikan logika berjalan benar.
# Contoh dari soal
print("hitungNomorBit(13, 0) -> {}".format(hitungNomorBit(13, 0)))
print("hitungNomorBit(13, 1) -> {}".format(hitungNomorBit(13, 1)))
print("hitungNomorBit(13, 2) -> {}".format(hitungNomorBit(13, 2)))
# Contoh lain
print("hitungNomorBit(100, 0) -> {}".format(hitungNomorBit(100, 0)))
print("hitungNomorBit(100, 1) -> {}".format(hitungNomorBit(100, 1)))
ZGVmIGhpdHVuZ05vbW9yQml0KGFuZ2thLCBub21vckJpdCk6CiAgIyBMYW5na2FoIDE6IFZhbGlkYXNpIGlucHV0IHVudHVrIG5vbW9yQml0LgogICMgSmlrYSBidWthbiAwIGF0YXUgMSwgbWFrYSBpbnB1dCB0aWRhayB2YWxpZC4KICBpZiBub21vckJpdCAhPSAwIGFuZCBub21vckJpdCAhPSAxOgogICAgcmV0dXJuIE5vbmUKCiAgIyBMYW5na2FoIDI6IE1lbmFuZ2FuaSBrYXN1cyBraHVzdXMgdW50dWsgYW5na2EgMC4KICAjIFJlcHJlc2VudGFzaSBiaW5lciBkYXJpIDAgYWRhbGFoICcwJy4KICBpZiBhbmdrYSA9PSAwOgogICAgaWYgbm9tb3JCaXQgPT0gMDoKICAgICAgcmV0dXJuIDEKICAgIGVsc2U6CiAgICAgIHJldHVybiAwCgogICMgTGFuZ2thaCAzOiBNZW55aWFwa2FuIHZhcmlhYmVsIHVudHVrIHByb3NlcyBwZXJoaXR1bmdhbi4KICBqdW1sYWhfYml0ID0gMAogIHNpc2FfYW5na2EgPSBhbmdrYQogIAogICMgTGFuZ2thaCA0OiBNZWxha3VrYW4gbG9vcCBrb252ZXJzaSBzYW1iaWwgbWVuZ2hpdHVuZy4KICAjIExvb3AgaW5pIGFrYW4gYmVyamFsYW4gc2FtcGFpIHRpZGFrIGFkYSBsYWdpIHlhbmcgYmlzYSBkaWJhZ2kuCiAgd2hpbGUgc2lzYV9hbmdrYSA+IDA6CiAgICAjIE1lbmRhcGF0a2FuIGJpdCB0ZXJha2hpciBkYXJpIGFuZ2thIHNhYXQgaW5pIG1lbmdndW5ha2FuIG1vZHVsbyAyLgogICAgYml0X3Nla2FyYW5nID0gc2lzYV9hbmdrYSAlIDIKICAgIAogICAgIyBNZW1lcmlrc2EgYXBha2FoIGJpdCB5YW5nIGRpdGVtdWthbiBzZXN1YWkgZGVuZ2FuIHlhbmcgZGljYXJpLgogICAgaWYgYml0X3Nla2FyYW5nID09IG5vbW9yQml0OgogICAgICBqdW1sYWhfYml0ICs9IDEKICAgICAgCiAgICAjIE1lbXBlcmJhcnVpIGFuZ2thIHVudHVrIGl0ZXJhc2kgc2VsYW5qdXRueWEgZGVuZ2FuIHBlbWJhZ2lhbiBpbnRlZ2VyLgogICAgc2lzYV9hbmdrYSA9IHNpc2FfYW5na2EgLy8gMgogICAgCiAgIyBMYW5na2FoIDU6IE1lbmdlbWJhbGlrYW4gaGFzaWwgYWtoaXIgcGVyaGl0dW5nYW4uCiAgcmV0dXJuIGp1bWxhaF9iaXQKCiMgLS0tIFBlbmd1amlhbiBLb2RlIC0tLQojIFNheWEgbWVsYWt1a2FuIGJlYmVyYXBhIHBlbmd1amlhbiB1bnR1ayBtZW1hc3Rpa2FuIGxvZ2lrYSBiZXJqYWxhbiBiZW5hci4KCiMgQ29udG9oIGRhcmkgc29hbApwcmludCgiaGl0dW5nTm9tb3JCaXQoMTMsIDApIC0+IHt9Ii5mb3JtYXQoaGl0dW5nTm9tb3JCaXQoMTMsIDApKSkKcHJpbnQoImhpdHVuZ05vbW9yQml0KDEzLCAxKSAtPiB7fSIuZm9ybWF0KGhpdHVuZ05vbW9yQml0KDEzLCAxKSkpCnByaW50KCJoaXR1bmdOb21vckJpdCgxMywgMikgLT4ge30iLmZvcm1hdChoaXR1bmdOb21vckJpdCgxMywgMikpKQoKIyBDb250b2ggbGFpbgpwcmludCgiaGl0dW5nTm9tb3JCaXQoMTAwLCAwKSAtPiB7fSIuZm9ybWF0KGhpdHVuZ05vbW9yQml0KDEwMCwgMCkpKQpwcmludCgiaGl0dW5nTm9tb3JCaXQoMTAwLCAxKSAtPiB7fSIuZm9ybWF0KGhpdHVuZ05vbW9yQml0KDEwMCwgMSkpKQ==