Итак, допустим, у меня есть число N
, которое гарантированно будет иметь степень 2 и всегда больше 0. Теперь я написал два C метода, чтобы найти, на чем основана сила 2 N
для побитовых операторов -
Метод A -
int whichPowerOf2(long long num) {
int ret = -1;
while (num) {
num >>= 1;
ret += 1;
}
return ret;
}
Метод B -
int whichPowerOf2(long long num) {
int idx = 0;
while (!(num & (1<<idx))) idx += 1;
return idx;
}
Интуитивно оба метода кажутся одинаковыми и возвращают одинаковые значения для разных (меньших) значений N
. Однако метод B не работает для меня, когда я пытаюсь представить свое решение проблемы кодирования.
Может кто-нибудь сказать мне, что здесь происходит? Почему метод А правильный и метод Б неправильный?