/* package whatever; // don't place package name! */
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
System.
out.
println(hitungNomorBit
(13,
0)); // 1 System.
out.
println(hitungNomorBit
(13,
1)); // 3 System.
out.
println(hitungNomorBit
(13,
2)); // 0 (pengganti null) System.
out.
println(hitungNomorBit
(Integer.
MAX_VALUE,
1)); // 31 bit 1 System.
out.
println(hitungNomorBit
(Integer.
MIN_VALUE,
1)); // 1 bit 1 dari sign bit System.
out.
println(hitungNomorBit
(0,
0)); // 1 bit 0 System.
out.
println(hitungNomorBit
(-1,
1)); // 32 bit 1 }
// asumsi angka adalah signed integer 32-bit dan leading zero tidak dihitung
public static int hitungNomorBit(int angka, int nomorBit) {
if (angka == 0 && nomorBit == 0) { // edge case untuk angka 0 dianggap sebagai 1 bit 0
return 1;
}
int zeroCount = 0;
int oneCount = 0;
while (angka != 0) {
if ((angka & 1) == 1) { // cek rightmost bit
oneCount++;
} else {
zeroCount++;
}
angka >>>= 1; // unsigned right shift supaya bit kiri diisi 0
}
if (nomorBit == 0) {
return zeroCount;
} else if (nomorBit == 1) {
return oneCount;
} else {
return 0; // tidak bisa return null karena return type di java harus seragam
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKCi8qIE5hbWUgb2YgdGhlIGNsYXNzIGhhcyB0byBiZSAiTWFpbiIgb25seSBpZiB0aGUgY2xhc3MgaXMgcHVibGljLiAqLwpjbGFzcyBJZGVvbmUKewoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJU3lzdGVtLm91dC5wcmludGxuKGhpdHVuZ05vbW9yQml0KDEzLCAwKSk7IC8vIDEKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaGl0dW5nTm9tb3JCaXQoMTMsIDEpKTsgLy8gMwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoaXR1bmdOb21vckJpdCgxMywgMikpOyAvLyAwIChwZW5nZ2FudGkgbnVsbCkKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaGl0dW5nTm9tb3JCaXQoSW50ZWdlci5NQVhfVkFMVUUsIDEpKTsgLy8gMzEgYml0IDEKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oaGl0dW5nTm9tb3JCaXQoSW50ZWdlci5NSU5fVkFMVUUsIDEpKTsgLy8gMSBiaXQgMSBkYXJpIHNpZ24gYml0CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGhpdHVuZ05vbW9yQml0KDAsIDApKTsgLy8gMSBiaXQgMAogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihoaXR1bmdOb21vckJpdCgtMSwgMSkpOyAvLyAzMiBiaXQgMQoJfQoJCgkvLyBhc3Vtc2kgYW5na2EgYWRhbGFoIHNpZ25lZCBpbnRlZ2VyIDMyLWJpdCBkYW4gbGVhZGluZyB6ZXJvIHRpZGFrIGRpaGl0dW5nCiAgICBwdWJsaWMgc3RhdGljIGludCBoaXR1bmdOb21vckJpdChpbnQgYW5na2EsIGludCBub21vckJpdCkgewogICAgICAgIGlmIChhbmdrYSA9PSAwICYmIG5vbW9yQml0ID09IDApIHsgLy8gZWRnZSBjYXNlIHVudHVrIGFuZ2thIDAgZGlhbmdnYXAgc2ViYWdhaSAxIGJpdCAwCiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KICAgICAgICBpbnQgemVyb0NvdW50ID0gMDsKICAgICAgICBpbnQgb25lQ291bnQgPSAwOwogICAgICAgIHdoaWxlIChhbmdrYSAhPSAwKSB7CiAgICAgICAgICAgIGlmICgoYW5na2EgJiAxKSA9PSAxKSB7IC8vIGNlayByaWdodG1vc3QgYml0CiAgICAgICAgICAgICAgICBvbmVDb3VudCsrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgemVyb0NvdW50Kys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYW5na2EgPj4+PSAxOyAvLyB1bnNpZ25lZCByaWdodCBzaGlmdCBzdXBheWEgYml0IGtpcmkgZGlpc2kgMAogICAgICAgIH0KICAgICAgICBpZiAobm9tb3JCaXQgPT0gMCkgewogICAgICAgICAgICByZXR1cm4gemVyb0NvdW50OwogICAgICAgIH0gZWxzZSBpZiAobm9tb3JCaXQgPT0gMSkgewogICAgICAgICAgICByZXR1cm4gb25lQ291bnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIDA7IC8vIHRpZGFrIGJpc2EgcmV0dXJuIG51bGwga2FyZW5hIHJldHVybiB0eXBlIGRpIGphdmEgaGFydXMgc2VyYWdhbQogICAgICAgIH0KICAgIH0KfQ==