#include <stdio.h>
int hitungNomorBit( int angka, int nomorBit) {
int positions[ 128 ] ;
int n = angka;
int pos = 0 ;
int count = 0 ;
// check the lowest bit each step; divide by 2 until 0
while ( n > 0 ) {
if ( n % 2 == 1 ) {
positions[ count] = pos; // remember where a 1-bit is
count++;
}
n = n / 2 ;
pos++;
}
// return the spot that is asked for, check if it's valid
if ( nomorBit >= 0 && nomorBit < count - 1 ) {
return positions[ nomorBit] + 1 ; // start at 1
}
return - 1 ; // null
}
int main( ) {
// the three examples from the question
int tests[ 3 ] [ 2 ] = { { 13 , 0 } , { 13 , 1 } , { 13 , 2 } } ;
for ( int i = 0 ; i < 3 ; i++ ) {
int r = hitungNomorBit( tests[ i] [ 0 ] , tests[ i] [ 1 ] ) ;
if ( r == - 1 ) {
printf ( "hitungNomorBit(%d, %d) -> mengeluarkan hasil null\n " , tests
[ i
] [ 0 ] , tests
[ i
] [ 1 ] ) ; } else {
printf ( "hitungNomorBit(%d, %d) -> mengeluarkan hasil bilangan desimal %d\n " , tests
[ i
] [ 0 ] , tests
[ i
] [ 1 ] , r
) ; }
}
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgaGl0dW5nTm9tb3JCaXQoaW50IGFuZ2thLCBpbnQgbm9tb3JCaXQpIHsKICAgIGludCBwb3NpdGlvbnNbMTI4XTsKICAgICAgCiAgICBpbnQgbiA9IGFuZ2thOwogICAgaW50IHBvcyA9IDA7CiAgICBpbnQgY291bnQgPSAwOyAKCiAgICAvLyBjaGVjayB0aGUgbG93ZXN0IGJpdCBlYWNoIHN0ZXA7IGRpdmlkZSBieSAyIHVudGlsIDAKICAgIHdoaWxlIChuID4gMCkgewogICAgICAgIGlmIChuICUgMiA9PSAxKSB7CiAgICAgICAgICAgIHBvc2l0aW9uc1tjb3VudF0gPSBwb3M7ICAvLyByZW1lbWJlciB3aGVyZSBhIDEtYml0IGlzCiAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgfQogICAgICAgIG4gPSBuIC8gMjsKICAgICAgICBwb3MrKzsKICAgIH0KCQoJLy8gcmV0dXJuIHRoZSBzcG90IHRoYXQgaXMgYXNrZWQgZm9yLCBjaGVjayBpZiBpdCdzIHZhbGlkCiAgICBpZiAobm9tb3JCaXQgPj0gMCAmJiBub21vckJpdCA8IGNvdW50IC0gMSkgewogICAgICAgIHJldHVybiBwb3NpdGlvbnNbbm9tb3JCaXRdICsgMTsgLy8gc3RhcnQgYXQgMQogICAgfQogICAgcmV0dXJuIC0xOyAvLyBudWxsCn0KCmludCBtYWluKCkgewoJLy8gdGhlIHRocmVlIGV4YW1wbGVzIGZyb20gdGhlIHF1ZXN0aW9uCiAgICBpbnQgdGVzdHNbM11bMl0gPSB7ezEzLCAwfSwgezEzLCAxfSwgezEzLCAyfX07IAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKICAgICAgICBpbnQgciA9IGhpdHVuZ05vbW9yQml0KHRlc3RzW2ldWzBdLCB0ZXN0c1tpXVsxXSk7CiAgICAgICAgaWYgKHIgPT0gLTEpIHsKICAgICAgICAgICAgcHJpbnRmKCJoaXR1bmdOb21vckJpdCglZCwgJWQpIC0+IG1lbmdlbHVhcmthbiBoYXNpbCBudWxsXG4iLCB0ZXN0c1tpXVswXSwgdGVzdHNbaV1bMV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHByaW50ZigiaGl0dW5nTm9tb3JCaXQoJWQsICVkKSAtPiBtZW5nZWx1YXJrYW4gaGFzaWwgYmlsYW5nYW4gZGVzaW1hbCAlZFxuIiwgdGVzdHNbaV1bMF0sIHRlc3RzW2ldWzFdLCByKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQ==