Рубрики

Найти позицию единственного установленного бита

Учитывая число, имеющее только одно «1» и все остальные «0» в его двоичном представлении, найдите позицию единственного установленного бита. Источник: Microsoft Интервью | 18

Идея состоит в том, чтобы начать с самого правого бита и по одному проверять значение каждого бита. Ниже приводится подробный алгоритм.

1) Если число является степенью двойки, то только тогда его двоичное представление содержит только одну '1'. Вот почему проверьте, является ли данное число степенью 2 или нет. Если заданное число не является степенью 2, распечатайте сообщение об ошибке и выйдите.

2) инициализировать две переменные; i = 1 (для цикла) и pos = 1 (для поиска позиции установленного бита)

3) Внутри цикла сделайте побитовое И из i и число 'N'. Если значение этой операции истинно, то устанавливается бит «pos», поэтому разорвите цикл и верните позицию. В противном случае увеличьте «pos» на 1, а левое смещение i на 1 и повторите процедуру.

C ++

// C ++ программа для поиска позиции только установленного бита в заданном числе
#include <bits/stdc++.h>

using namespace std;

  
// Вспомогательная функция для проверки, является ли n степенью 2 или нет.
// см. Http: // goo.gl/17Arj

int isPowerOfTwo(unsigned n)

{

    return n && (!(n & (n - 1)));

}

  
// Возвращает позицию единственного установленного бита в 'n'

int findPosition(unsigned n)

{

    if (!isPowerOfTwo(n))

        return -1;

  

    unsigned i = 1, pos = 1;

  

    // Перебираем биты n, пока не найдем установленный бит

    // i & n будет ненулевым, только когда у 'i' и 'n' есть установленный бит

    // в той же позиции

    while (!(i & n)) {

        // Сбрасываем текущий бит и устанавливаем следующий бит в 'i'

        i = i << 1;

  

        // увеличиваем позицию

        ++pos;

    }

  

    return pos;

}

  
// Программа драйвера для проверки вышеуказанной функции

int main(void)

{

    int n = 16;

    int pos = findPosition(n);

    (pos == -1) ? cout << "n = " << n << ", Invalid number" << endl : cout << "n = " << n << ", Position " << pos << endl;

  

    n = 12;

    pos = findPosition(n);

    (pos == -1) ? cout << "n = " << n << ", Invalid number" << endl : cout << "n = " << n << ", Position " << pos << endl;

  

    n = 128;

    pos = findPosition(n);

    (pos == -1) ? cout << "n = " << n << ", Invalid number" << endl : cout << "n = " << n << ", Position " << pos << endl;

  

    return 0;

}

  
// Этот код предоставлен rathbhupendra

С

// C программа для поиска позиции только установленного бита в данном номере
#include <stdio.h>

  
// Вспомогательная функция для проверки, является ли n степенью 2 или нет.
// см. Http: // goo.gl/17Arj

int isPowerOfTwo(unsigned n)

{

    return n && (!(n & (n - 1)));

}

  
// Возвращает позицию единственного установленного бита в 'n'

int findPosition(unsigned n)

{

    if (!isPowerOfTwo(n))

        return -1;

  

    unsigned i = 1, pos = 1;

  

    // Перебираем биты n, пока не найдем установленный бит

    // i & n будет ненулевым, только когда у 'i' и 'n' есть установленный бит

    // в той же позиции

    while (!(i & n)) {

        // Сбрасываем текущий бит и устанавливаем следующий бит в 'i'

        i = i << 1;

  

        // увеличиваем позицию

        ++pos;

    }

  

    return pos;

}

  
// Программа драйвера для проверки вышеуказанной функции

int main(void)

{

    int n = 16;

    int pos = findPosition(n);

    (pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);

  

    n = 12;

    pos = findPosition(n);

    (pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);

  

    n = 128;

    pos = findPosition(n);

    (pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);

  

    return 0;

}

Джава

// Java программа для поиска позиции только установленного бита в данном номере

class GFG {

  

    // Вспомогательная функция для проверки, является ли n степенью 2 или нет.

    // см. Http: // goo.gl/17Arj

    static boolean isPowerOfTwo(int n)

    {

        return (n > 0 && ((n & (n - 1)) == 0)) ? true : false;

    }

  

    // Возвращает позицию единственного установленного бита в 'n'

    static int findPosition(int n)

    {

        if (!isPowerOfTwo(n))

            return -1;

  

        int i = 1, pos = 1;

  

        // Перебираем биты n, пока не найдем установленный бит

        // i & n будет ненулевым, только когда у 'i' и 'n' есть установленный бит

        // в той же позиции

        while ((i & n) == 0) {

            // Сбрасываем текущий бит и устанавливаем следующий бит в 'i'

            i = i << 1;

  

            // увеличиваем позицию

            ++pos;

        }

  

        return pos;

    }

  

    // Код драйвера

    public static void main(String[] args)

    {

        int n = 16;

        int pos = findPosition(n);

        if (pos == -1)

            System.out.println("n = " + n + ", Invalid number");

        else

            System.out.println("n = " + n + ", Position " + pos);

  

        n = 12;

        pos = findPosition(n);

        if (pos == -1)

            System.out.println("n = " + n + ", Invalid number");

        else

            System.out.println("n = " + n + ", Position " + pos);

  

        n = 128;

        pos = findPosition(n);

        if (pos == -1)

            System.out.println("n = " + n + ", Invalid number");

        else

            System.out.println("n = " + n + ", Position " + pos);

    }

}

  
// Этот код предоставлен mits

python3

# Python3 программа для поиска позиции
# установить только бит в данном номере

  
# Полезная функция для проверки
# является ли n степенью 2 или
# нет.

def isPowerOfTwo(n):

    return (True if(n > 0 and 

                   ((n & (n - 1)) > 0)) 

                 else False); 

      
# Возвращает позицию
# установить только бит в 'n'

def findPosition(n):

    if (isPowerOfTwo(n) == True):

        return -1;

  

    i = 1;

    pos = 1;

  

    # Перебирать биты n

    # пока мы не найдем установленный бит i & n

    # будет ненулевым только тогда, когда

    # 'i' и 'n' имеют установленный бит

    # в той же позиции

    while ((i & n) == 0):

          

        # Сбросить текущий бит и

        # установить следующий бит в «я»

        i = i << 1;

  

        # позиция приращения

        pos += 1;

  

    return pos;

  
Код водителя

n = 16;

pos = findPosition(n);

if (pos == -1):

    print("n =", n, ", Invalid number");

else:

    print("n =", n, ", Position ", pos);

  

n = 12;

pos = findPosition(n);

if (pos == -1):

    print("n =", n, ", Invalid number");

else:

    print("n =", n, ", Position ", pos);

  

n = 128;

pos = findPosition(n);

if (pos == -1):

    print("n =", n, ", Invalid number");

else:

    print("n =", n, ", Position ", pos);

  
# Этот код предоставлен mits

C #

// C # программа для поиска позиции только установленного бита в данном номере

using System;

  

class GFG {

  

    // Вспомогательная функция для проверки, является ли n степенью 2 или нет.

    // см. Http: // goo.gl/17Arj

    static bool isPowerOfTwo(int n)

    {

        return (n > 0 && ((n & (n - 1)) == 0)) ? true : false;

    }

  

    // Возвращает позицию единственного установленного бита в 'n'

    static int findPosition(int n)

    {

        if (!isPowerOfTwo(n))

            return -1;

  

        int i = 1, pos = 1;

  

        // Перебираем биты n, пока не найдем установленный бит

        // i & n будет ненулевым, только когда у 'i' и 'n' есть установленный бит

        // в той же позиции

        while ((i & n) == 0) {

            // Сбрасываем текущий бит и устанавливаем следующий бит в 'i'

            i = i << 1;

  

            // увеличиваем позицию

            ++pos;

        }

  

        return pos;

    }

  

    // Код драйвера

    static void Main()

    {

        int n = 16;

        int pos = findPosition(n);

        if (pos == -1)

            Console.WriteLine("n = " + n + ", Invalid number");

        else

            Console.WriteLine("n = " + n + ", Position " + pos);

  

        n = 12;

        pos = findPosition(n);

        if (pos == -1)

            Console.WriteLine("n = " + n + ", Invalid number");

        else

            Console.WriteLine("n = " + n + ", Position " + pos);

  

        n = 128;

        pos = findPosition(n);

        if (pos == -1)

            Console.WriteLine("n = " + n + ", Invalid number");

        else

            Console.WriteLine("n = " + n + ", Position " + pos);

    }

}

  
// Этот код предоставлен mits

PHP

<?php
// PHP программа для поиска позиции
// установить только бит в данном номере

  
// Полезная функция для проверки
// является ли n степенью 2 или
// нет. Смотрите http://goo.gl/17Arj

function isPowerOfTwo($n)

{

    return $n && (!($n & ($n - 1))); 

      
}

  
// Возвращает позицию
// установить только бит в 'n'

function findPosition($n)

{

    if (!isPowerOfTwo($n))

        return -1;

  

    $i = 1;

    $pos = 1;

  

    // Перебирать биты n

    // пока мы не найдем установленный бит i & n

    // будет ненулевым только когда

    // у 'i' и 'n' есть установленный бит

    // в той же позиции

    while (!($i & $n))

    {

        // Сбросить текущий бит и

        // установить следующий бит в 'i'

        $i = $i << 1;

  

        // увеличиваем позицию

        ++$pos;

    }

  

    return $pos;

}

  
// Код драйвера

$n = 16;

$pos = findPosition($n);

if (($pos == -1) == true)

        echo "n =", $n, ", ",

             " Invalid number", "\n";

else

        echo "n = ", $n, ", ",

             " Position ", $pos, "\n";

  

$n = 12;

$pos = findPosition($n);

if(($pos == -1) == true)     

        echo "n = ", $n, ", "

             " Invalid number", "\n";

else

        echo "n =", $n, ", "

             " Position ", $pos, "\n";

$n = 128;

$pos = findPosition($n);

if(($pos == -1) == true)     

        echo "n =", $n, ", ",

             " Invalid number", "\n";

else

        echo "n = ", $n, ", ",

             " Position ", $pos, "\n";

  
// Этот код предоставлен ajit
?>

Выход :

n = 16, Position 5
n = 12, Invalid number
n = 128, Position 8

Ниже приведен еще один метод решения этой проблемы. Идея состоит в том, чтобы один за другим сдвигать вправо установленный бит заданного числа 'n' до тех пор, пока 'n' не станет 0. Посчитайте, сколько раз мы сдвинулись, чтобы сделать 'n' нулем. Окончательный счетчик — это позиция установленного бита.

C ++

// C ++ программа для поиска позиции только установленного бита в заданном числе
#include <bits/stdc++.h>

using namespace std;

  
// Утилита для проверки, является ли n степенью 2 или нет

int isPowerOfTwo(unsigned n) 

    return n && (!(n & (n - 1))); 

  
// Возвращает позицию единственного установленного бита в 'n'

int findPosition(unsigned n) 

    if (!isPowerOfTwo(n)) 

        return -1; 

  

    unsigned count = 0; 

  

    // Один за другим перемещаем единственный установленный бит вправо, пока он не достигнет конца

    while (n)

    

        n = n >> 1; 

  

        // увеличиваем количество смен

        ++count; 

    

  

    return count; 

  
// Код драйвера

int main(void

    int n = 0; 

    int pos = findPosition(n); 

    (pos == -1) ? cout<<"n = "<<n<<", Invalid number\n"

                    cout<<"n = "<<n<<", Position "<< pos<<endl; 

  

    n = 12; 

    pos = findPosition(n); 

    (pos == -1) ? cout<<"n = "<<n<<", Invalid number\n" :

               cout<<"n = "<<n<<", Position "<< pos<<endl;

  

    n = 128; 

    pos = findPosition(n); 

    (pos == -1) ? cout<<"n = "<<n<<", Invalid number\n" :

                cout<<"n = "<<n<<", Position "<< pos<<endl; 

  

    return 0; 

  
// Этот код предоставлен rathbhupendra

С

// C программа для поиска позиции только установленного бита в данном номере
#include <stdio.h>

  
// Утилита для проверки, является ли n степенью 2 или нет

int isPowerOfTwo(unsigned n)

{

    return n && (!(n & (n - 1)));

}

  
// Возвращает позицию единственного установленного бита в 'n'

int findPosition(unsigned n)

{

    if (!isPowerOfTwo(n))

        return -1;

  

    unsigned count = 0;

  

    // Один за другим перемещаем единственный установленный бит вправо, пока он не достигнет конца

    while (n) {

        n = n >> 1;

  

        // увеличиваем количество смен

        ++count;

    }

  

    return count;

}

  
// Программа драйвера для проверки вышеуказанной функции

int main(void)

{

    int n = 0;

    int pos = findPosition(n);

    (pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);

  

    n = 12;

    pos = findPosition(n);

    (pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);

  

    n = 128;

    pos = findPosition(n);

    (pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);

  

    return 0;

}

Джава

// Java-программа для поиска позиции только
// установить бит в заданном числе

  

class GFG {

  

    // Полезная функция для проверки

    // n это степень 2 или нет

    static boolean isPowerOfTwo(int n)

    {

        return n > 0 && ((n & (n - 1)) == 0);

    }

  

    // Возвращает позицию единственного установленного бита в 'n'

    static int findPosition(int n)

    {

        if (!isPowerOfTwo(n))

            return -1;

  

        int count = 0;

  

        // Один за другим перемещаем единственный установленный бит

        // вправо до конца

        while (n > 0) {

            n = n >> 1;

  

            // увеличиваем количество смен

            ++count;

        }

  

        return count;

    }

  

    // Код драйвера

    public static void main(String[] args)

    {

        int n = 0;

        int pos = findPosition(n);

        if (pos == -1)

            System.out.println("n = " + n + ", Invalid number");

        else

            System.out.println("n = " + n + ", Position " + pos);

  

        n = 12;

        pos = findPosition(n);

        if (pos == -1)

            System.out.println("n = " + n + ", Invalid number");

        else

            System.out.println("n = " + n + ", Position " + pos);

  

        n = 128;

        pos = findPosition(n);

        if (pos == -1)

            System.out.println("n = " + n + ", Invalid number");

        else

            System.out.println("n = " + n + ", Position " + pos);

    }

}

  
// Этот код разделен на mits

python3

# Python 3 программа для поиска позиции
# только установленного бита в данном числе

  
# Полезная функция для проверки
# n это степень 2 или нет

def isPowerOfTwo(n) :

  

    return (n and ( not (n & (n-1))))

  
# Возвращает позицию единственного установленного бита в 'n'

def findPosition(n) :

  

    if not isPowerOfTwo(n) :

        return -1

  

    count = 0

  

    # Один за другим переместите единственный установленный бит в

    # прямо до конца

    while (n) :

          

        n = n >> 1

  

        # приращение количества смен

        count += 1

  

    return count

  

  
# Программа драйвера для проверки вышеуказанной функции

if __name__ == "__main__" :

    n = 0

    pos = findPosition(n)

  

    if pos == -1 :

        print("n =", n, "Invalid number")

    else :

        print("n =", n, "Position", pos)

  

    n = 12

    pos = findPosition(n)

  

    if pos == -1 :

        print("n =", n, "Invalid number")

    else :

        print("n =", n, "Position", pos)

  

    n = 128

    pos = findPosition(n)

  

    if pos == -1 :

        print("n =", n, "Invalid number")

    else :

        print("n =", n, "Position", pos)

     
# Этот код предоставлен ANKITRAI1

C #

// C # программа для поиска позиции только
// установить бит в заданном числе

using System;

  

class GFG {

  

    // Полезная функция для проверки

    // n это степень 2 или нет

    static bool isPowerOfTwo(int n)

    {

        return n > 0 && ((n & (n - 1)) == 0);

    }

  

    // Возвращает позицию единственного установленного бита в 'n'

    static int findPosition(int n)

    {

        if (!isPowerOfTwo(n))

            return -1;

  

        int count = 0;

  

        // Один за другим перемещаем единственный установленный бит

        // вправо до конца

        while (n > 0) {

            n = n >> 1;

  

            // увеличиваем количество смен

            ++count;

        }

  

        return count;

    }

  

    // Код драйвера

    static void Main()

    {

        int n = 0;

        int pos = findPosition(n);

        if (pos == -1)

            Console.WriteLine("n = " + n + ", Invalid number");

        else

            Console.WriteLine("n = " + n + ", Position " + pos);

  

        n = 12;

        pos = findPosition(n);

        if (pos == -1)

            Console.WriteLine("n = " + n + ", Invalid number");

        else

            Console.WriteLine("n = " + n + ", Position " + pos);

  

        n = 128;

        pos = findPosition(n);

        if (pos == -1)

            Console.WriteLine("n = " + n + ", Invalid number");

        else

            Console.WriteLine("n = " + n + ", Position " + pos);

    }

}

  
// Этот код разделен на mits

PHP

<?php
// PHP программа для поиска позиции
// установить только бит в данном номере

  
// Полезная функция для проверки
// является ли n степенью 2 или нет

function isPowerOfTwo($n)

    return $n && (! ($n & ($n - 1))); 

}

  
// Возвращает позицию
// установить только бит в 'n'

function findPosition($n)

{

    if (!isPowerOfTwo($n))

        return -1;

  

    $count = 0;

  

    // Один за другим перемещаем единственный набор

    // немного вправо до конца

    while ($n)

    {

        $n = $n >> 1;

  

        // увеличиваем количество смен

        ++$count;

    }

  

    return $count;

}

  
// Код драйвера

$n = 0;

$pos = findPosition($n);

if(($pos == -1) == true)

    echo "n = ", $n, ", "

         " Invalid number", "\n";

else

    echo "n = ", $n, ", ",

         " Position ", $pos, "\n";

  

$n = 12;

$pos = findPosition($n);

if (($pos == -1) == true)

        echo "n = ", $n, ", ",

             " Invalid number", "\n";

else

        echo "n = ", $n

             " Position ", $pos, "\n";

  

$n = 128;

$pos = findPosition($n);

    if(($pos == -1) == true)

        echo "n = ", $n, ", "

             " Invalid number", "\n";

else

        echo "n = ", $n, ", "

             " Position ", $pos, "\n";

          
// Этот код предоставлен ajit
?>

Выход :

n = 0, Invalid number
n = 12, Invalid number
n = 128, Position 8

Мы также можем использовать базу базы 2, чтобы найти позицию . Спасибо Арункумар за предложение этого решения.

C ++

#include <bits/stdc++.h>

using namespace std;

  

unsigned int Log2n(unsigned int n) 

    return (n > 1) ? 1 + Log2n(n / 2) : 0; 

  

int isPowerOfTwo(unsigned n) 

    return n && (!(n & (n - 1))); 

  

int findPosition(unsigned n) 

    if (!isPowerOfTwo(n)) 

        return -1; 

    return Log2n(n) + 1; 

  
// Код драйвера

int main(void

    int n = 0; 

    int pos = findPosition(n); 

    (pos == -1) ? cout<<"n = "<<n<<", Invalid number\n"

            cout<<"n = "<<n<<", Position "<<pos<<" \n"

  

    n = 12; 

    pos = findPosition(n); 

    (pos == -1) ? cout<<"n = "<<n<<", Invalid number\n"

            cout<<"n = "<<n<<", Position "<<pos<<" \n"

  

    n = 128; 

    pos = findPosition(n); 

    (pos == -1) ? cout<<"n = "<<n<<", Invalid number\n"

            cout<<"n = "<<n<<", Position "<<pos<<" \n"

  

    return 0; 

  

  
// Этот код предоставлен rathbhupendra

С

#include <stdio.h>

  

unsigned int Log2n(unsigned int n)

{

    return (n > 1) ? 1 + Log2n(n / 2) : 0;

}

  

int isPowerOfTwo(unsigned n)

{

    return n && (!(n & (n - 1)));

}

  

int findPosition(unsigned n)

{

    if (!isPowerOfTwo(n))

        return -1;

    return Log2n(n) + 1;

}

  
// Программа драйвера для проверки вышеуказанной функции

int main(void)

{

    int n = 0;

    int pos = findPosition(n);

    (pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);

  

    n = 12;

    pos = findPosition(n);

    (pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);

  

    n = 128;

    pos = findPosition(n);

    (pos == -1) ? printf("n = %d, Invalid number\n", n) : printf("n = %d, Position %d \n", n, pos);

  

    return 0;

}

Джава

// Java программа для поиска позиции
// только установленного бита в данном номере

  

class GFG {

    static int Log2n(int n)

    {

        return (n > 1) ? 1 + Log2n(n / 2) : 0;

    }

  

    static boolean isPowerOfTwo(int n)

    {

        return n > 0 && ((n & (n - 1)) == 0);

    }

  

    static int findPosition(int n)

    {

        if (!isPowerOfTwo(n))

            return -1;

        return Log2n(n) + 1;

    }

  

    // Код драйвера

    public static void main(String[] args)

    {

        int n = 0;

        int pos = findPosition(n);

        if (pos == -1)

            System.out.println("n = " + n + ", Invalid number ");

        else

            System.out.println("n = " + n + ", Position " + pos);

  

        n = 12;

        pos = findPosition(n);

        if (pos == -1)

            System.out.println("n = " + n + ", Invalid number ");

        else

            System.out.println("n = " + n + ", Position " + pos);

  

        n = 128;

        pos = findPosition(n);

        if (pos == -1)

            System.out.println("n = " + n + ", Invalid number ");

        else

            System.out.println("n = " + n + ", Position " + pos);

    }

}

  
// Этот код предоставлен mits

python3

# Python программа для поиска позиции
# только установленного бита в данном числе

  

def Log2n(n):

    if (n > 1):

        return (1 + Log2n(n / 2))

    else:

        return 0

      
# Полезная функция для проверки
# является ли n степенью 2 или нет

def isPowerOfTwo(n):

    return n and (not (n & (n-1)) )

      

def findPosition(n):

    if (not isPowerOfTwo(n)):

        return -1

    return Log2n(n) + 1

      
# Программа драйвера для проверки вышеуказанной функции

  

n = 0

pos = findPosition(n)

if(pos == -1):

    print("n =", n, ", Invalid number")

else:

    print("n = ", n, ", Position ", pos)

   

n = 12

pos = findPosition(n)

if(pos == -1):

    print("n =", n, ", Invalid number")

else:

    print("n = ", n, ", Position ", pos)

n = 128

pos = findPosition(n)

if(pos == -1):

    print("n = ", n, ", Invalid number")

else:

    print("n = ", n, ", Position ", pos)

   
# Этот код добавлен
# Сумит Судхакар

C #

// C # программа для поиска позиции
// только установленного бита в данном номере

  

using System;

  

class GFG {

    static int Log2n(int n)

    {

        return (n > 1) ? 1 + Log2n(n / 2) : 0;

    }

  

    static bool isPowerOfTwo(int n)

    {

        return n > 0 && ((n & (n - 1)) == 0);

    }

  

    static int findPosition(int n)

    {

        if (!isPowerOfTwo(n))

            return -1;

        return Log2n(n) + 1;

    }

  

    // Программа драйвера для проверки вышеуказанной функции

    static void Main()

    {

        int n = 0;

        int pos = findPosition(n);

        if (pos == -1)

            Console.WriteLine("n = " + n + ", Invalid number ");

        else

            Console.WriteLine("n = " + n + ", Position " + pos);

  

        n = 12;

        pos = findPosition(n);

        if (pos == -1)

            Console.WriteLine("n = " + n + ", Invalid number ");

        else

            Console.WriteLine("n = " + n + ", Position " + pos);

  

        n = 128;

        pos = findPosition(n);

        if (pos == -1)

            Console.WriteLine("n = " + n + ", Invalid number ");

        else

            Console.WriteLine("n = " + n + ", Position " + pos);

    }

}
// Этот код предоставлен mits

PHP

<?php
// PHP программа для поиска позиции
// только установленного бита в данном номере

function Log2n($n)

{

return ($n > 1) ? 1 + 

  Log2n($n / 2) : 0;

}

  

function isPowerOfTwo($n)

{

    return $n && (! ($n

                    ($n - 1)));

}

  

function findPosition($n)

{

    if (!isPowerOfTwo($n))

        return -1;

    return Log2n($n) + 1;

}

  
// Код драйвера

$n = 0;

$pos = findPosition($n);

if(($pos == -1) == true)

        echo "n =", $n, ", "

             " Invalid number", "\n";

else

        echo "n = ", $n, ", "

             " Position n", $pos, "\n";

  

$n = 12;

$pos = findPosition($n);

if(($pos == -1) == true)

            echo "n = ", $n, ", "

                 " Invalid number", "\n";

        else

            echo "n =", $n, ", "

                 " Position", $pos, "\n";

  
// Код драйвера

$n = 128;

$pos = findPosition($n);

if(($pos == -1) == true)

        echo "n = ", $n, ", "

             " Invalid number", "\n";

else

        echo "n = ", $n, ", "

             " Position ", $pos, "\n";

          
// Этот код предоставлен aj_36
?>


Выход :

n = 0, Invalid number
n = 12, Invalid number
n = 128, Position 8

Эта статья составлена Нарендрой Кангралкар . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Найти позицию единственного установленного бита

0.00 (0%) 0 votes