找到唯一设定位的位置

给定一个在二进制表示中只有一个“1”和所有其他“0”的数字N,查找唯一设定位的位置。如果有0个或超过1个设定位,答案应该是-1。在数字的二进制表示中,设置位“1”的位置应从LSB侧的1开始计数。

null

资料来源: 微软采访| 18

例如:-

Input:
N = 2
Output:
2
Explanation:
2 is represented as "10" in Binary.
As we see there's only one set bit
and it's in Position 2 and thus the
Output 2.

这里是另一个例子

Input:
N = 5
Output:
-1
Explanation:
5 is represented as "101" in Binary.
As we see there's two set bits
and thus the Output -1.

其思想是从最右边的位开始,逐个检查每个位的值。下面是一个详细的算法。 1) 如果数字是二的幂,那么它的二进制表示形式只包含一个“1”。这就是为什么要检查给定的数字是否是2的幂。如果给定的数字不是2的幂,则打印错误消息并退出。 2) 初始化两个变量;i=1(用于循环)和pos=1(用于查找设定位的位置) 3) 在循环内部,对i和数字’N’进行位和运算。如果此操作的值为真,则设置“pos”位,因此断开循环并返回位置。否则,将“pos”增加1,将左移位i增加1,并重复该步骤。

C++

// C++ program to find position of only set bit in a given number
#include <bits/stdc++.h>
using namespace std;
// A utility function to check whether n is a power of 2 or not.
int isPowerOfTwo(unsigned n)
{
return n && (!(n & (n - 1)));
}
// Returns position of the only set bit in 'n'
int findPosition(unsigned n)
{
if (!isPowerOfTwo(n))
return -1;
unsigned i = 1, pos = 1;
// Iterate through bits of n till we find a set bit
// i&n will be non-zero only when 'i' and 'n' have a set bit
// at same position
while (!(i & n)) {
// Unset current bit and set the next bit in 'i'
i = i << 1;
// increment position
++pos;
}
return pos;
}
// Driver program to test above function
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;
}
// This code is contributed by rathbhupendra


C

// C program to find position of only set bit in a given number
#include <stdio.h>
// A utility function to check whether n is a power of 2 or not.
int isPowerOfTwo(unsigned n)
{
return n && (!(n & (n - 1)));
}
// Returns position of the only set bit in 'n'
int findPosition(unsigned n)
{
if (!isPowerOfTwo(n))
return -1;
unsigned i = 1, pos = 1;
// Iterate through bits of n till we find a set bit
// i&n will be non-zero only when 'i' and 'n' have a set bit
// at same position
while (!(i & n)) {
// Unset current bit and set the next bit in 'i'
i = i << 1;
// increment position
++pos;
}
return pos;
}
// Driver program to test above function
int main( void )
{
int n = 16;
int pos = findPosition(n);
(pos == -1) ? printf ( "n = %d, Invalid number" , n) : printf ( "n = %d, Position %d " , n, pos);
n = 12;
pos = findPosition(n);
(pos == -1) ? printf ( "n = %d, Invalid number" , n) : printf ( "n = %d, Position %d " , n, pos);
n = 128;
pos = findPosition(n);
(pos == -1) ? printf ( "n = %d, Invalid number" , n) : printf ( "n = %d, Position %d " , n, pos);
return 0;
}


JAVA

// Java program to find position of only set bit in a given number
class GFG {
// A utility function to check whether n is a power of 2 or not.
static boolean isPowerOfTwo( int n)
{
return (n > 0 && ((n & (n - 1 )) == 0 )) ? true : false ;
}
// Returns position of the only set bit in 'n'
static int findPosition( int n)
{
if (!isPowerOfTwo(n))
return - 1 ;
int i = 1 , pos = 1 ;
// Iterate through bits of n till we find a set bit
// i&n will be non-zero only when 'i' and 'n' have a set bit
// at same position
while ((i & n) == 0 ) {
// Unset current bit and set the next bit in 'i'
i = i << 1 ;
// increment position
++pos;
}
return pos;
}
// Driver code
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);
}
}
// This code is contributed by mits


Python3

# Python3 program to find position of
# only set bit in a given number
# A utility function to check
# whether n is power of 2 or
# not.
def isPowerOfTwo(n):
return ( True if (n > 0 and
((n & (n - 1 )) > 0 ))
else False );
# Returns position of the
# only set bit in 'n'
def findPosition(n):
if (isPowerOfTwo(n) = = True ):
return - 1 ;
i = 1 ;
pos = 1 ;
# Iterate through bits of n
# till we find a set bit i&n
# will be non-zero only when
# 'i' and 'n' have a set bit
# at same position
while ((i & n) = = 0 ):
# Unset current bit and
# set the next bit in 'i'
i = i << 1 ;
# increment position
pos + = 1 ;
return pos;
# Driver Code
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);
# This code is contributed by mits


C#

// C# program to find position of only set bit in a given number
using System;
class GFG {
// A utility function to check whether n is a power of 2 or not.
static bool isPowerOfTwo( int n)
{
return (n > 0 && ((n & (n - 1)) == 0)) ? true : false ;
}
// Returns position of the only set bit in 'n'
static int findPosition( int n)
{
if (!isPowerOfTwo(n))
return -1;
int i = 1, pos = 1;
// Iterate through bits of n till we find a set bit
// i&n will be non-zero only when 'i' and 'n' have a set bit
// at same position
while ((i & n) == 0) {
// Unset current bit and set the next bit in 'i'
i = i << 1;
// increment position
++pos;
}
return pos;
}
// Driver code
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);
}
}
// This code is contributed by mits


PHP

<?php
// PHP program to find position of
// only set bit in a given number
// A utility function to check
// whether n is power of 2 or
function isPowerOfTwo( $n )
{
return $n && (!( $n & ( $n - 1)));
}
// Returns position of the
// only set bit in 'n'
function findPosition( $n )
{
if (!isPowerOfTwo( $n ))
return -1;
$i = 1;
$pos = 1;
// Iterate through bits of n
// till we find a set bit i&n
// will be non-zero only when
// 'i' and 'n' have a set bit
// at same position
while (!( $i & $n ))
{
// Unset current bit and
// set the next bit in 'i'
$i = $i << 1;
// increment position
++ $pos ;
}
return $pos ;
}
// Driver Code
$n = 16;
$pos = findPosition( $n );
if (( $pos == -1) == true)
echo "n =" , $n , ", " ,
" Invalid number" , "" ;
else
echo "n = " , $n , ", " ,
" Position " , $pos , "" ;
$n = 12;
$pos = findPosition( $n );
if (( $pos == -1) == true)
echo "n = " , $n , ", " ,
" Invalid number" , "" ;
else
echo "n =" , $n , ", " ,
" Position " , $pos , "" ;
$n = 128;
$pos = findPosition( $n );
if (( $pos == -1) == true)
echo "n =" , $n , ", " ,
" Invalid number" , "" ;
else
echo "n = " , $n , ", " ,
" Position " , $pos , "" ;
// This code is contributed by ajit
?>


Javascript

<script>
// JavaScript program to find position of
// only set bit in a given number
// A utility function to check
// whether n is power of 2 or
// not.
function isPowerOfTwo(n){
return (n > 0 && ((n & (n - 1)) == 0)) ? true : false ;
}
// Returns position of the
// only set bit in 'n'
function findPosition(n){
if (isPowerOfTwo(n) == false )
return -1;
var i = 1;
var pos = 1;
// Iterate through bits of n
// till we find a set bit i&n
// will be non-zero only when
// 'i' and 'n' have a set bit
// at same position
while ((i & n) == 0){
// Unset current bit and
// set the next bit in 'i'
i = i << 1;
// increment position
pos += 1;
}
return pos;
}
// Driver Code
var n = 16;
var pos = findPosition(n);
if (pos == -1)
document.write( "n =" + n + ", Invalid number" );
else
document.write( "n =" + n + ", Position " + pos);
document.write( "<br>" );
n = 12;
pos = findPosition(n);
if (pos == -1)
document.write( "n =" + n + ", Invalid number" );
else
document.write( "n =" + n + ", Position " , pos);
document.write( "<br>" );
n = 128;
pos = findPosition(n);
if (pos == -1)
document.write( "n =" + n + ", Invalid number" );
else
document.write( "n =" + n + ", Position " + pos);
// This code is contributed by AnkThon
</script>


输出:

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

以下是 另一种方法 对于这个问题。其思想是将给定数字“n”的设定位逐个右移,直到“n”变为0。数一数我们移动了多少次,使n为零。最终计数是设定位的位置。

C++

// C++ program to find position of only set bit in a given number
#include <bits/stdc++.h>
using namespace std;
// A utility function to check whether n is power of 2 or not
int isPowerOfTwo(unsigned n)
{
return n && (!(n & (n - 1)));
}
// Returns position of the only set bit in 'n'
int findPosition(unsigned n)
{
if (!isPowerOfTwo(n))
return -1;
unsigned count = 0;
// One by one move the only set bit to right till it reaches end
while (n)
{
n = n >> 1;
// increment count of shifts
++count;
}
return count;
}
// Driver code
int main( void )
{
int n = 0;
int pos = findPosition(n);
(pos == -1) ? cout<< "n = " <<n<< ", Invalid number" :
cout<< "n = " <<n<< ", Position " << pos<<endl;
n = 12;
pos = findPosition(n);
(pos == -1) ? cout<< "n = " <<n<< ", Invalid number" :
cout<< "n = " <<n<< ", Position " << pos<<endl;
n = 128;
pos = findPosition(n);
(pos == -1) ? cout<< "n = " <<n<< ", Invalid number" :
cout<< "n = " <<n<< ", Position " << pos<<endl;
return 0;
}
// This code is contributed by rathbhupendra


C

// C program to find position of only set bit in a given number
#include <stdio.h>
// A utility function to check whether n is power of 2 or not
int isPowerOfTwo(unsigned n)
{
return n && (!(n & (n - 1)));
}
// Returns position of the only set bit in 'n'
int findPosition(unsigned n)
{
if (!isPowerOfTwo(n))
return -1;
unsigned count = 0;
// One by one move the only set bit to right till it reaches end
while (n) {
n = n >> 1;
// increment count of shifts
++count;
}
return count;
}
// Driver program to test above function
int main( void )
{
int n = 0;
int pos = findPosition(n);
(pos == -1) ? printf ( "n = %d, Invalid number" , n) : printf ( "n = %d, Position %d " , n, pos);
n = 12;
pos = findPosition(n);
(pos == -1) ? printf ( "n = %d, Invalid number" , n) : printf ( "n = %d, Position %d " , n, pos);
n = 128;
pos = findPosition(n);
(pos == -1) ? printf ( "n = %d, Invalid number" , n) : printf ( "n = %d, Position %d " , n, pos);
return 0;
}


JAVA

// Java program to find position of only
// set bit in a given number
class GFG {
// A utility function to check whether
// n is power of 2 or not
static boolean isPowerOfTwo( int n)
{
return n > 0 && ((n & (n - 1 )) == 0 );
}
// Returns position of the only set bit in 'n'
static int findPosition( int n)
{
if (!isPowerOfTwo(n))
return - 1 ;
int count = 0 ;
// One by one move the only set bit
// to right till it reaches end
while (n > 0 ) {
n = n >> 1 ;
// increment count of shifts
++count;
}
return count;
}
// Driver code
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);
}
}
// This code is contributed by mits


Python3

# Python 3 program to find position
# of only set bit in a given number
# A utility function to check whether
# n is power of 2 or not
def isPowerOfTwo(n) :
return (n and ( not (n & (n - 1 ))))
# Returns position of the only set bit in 'n'
def findPosition(n) :
if not isPowerOfTwo(n) :
return - 1
count = 0
# One by one move the only set bit to
# right till it reaches end
while (n) :
n = n >> 1
# increment count of shifts
count + = 1
return count
# Driver program to test above function
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)
# This code is contributed by ANKITRAI1


C#

// C# program to find position of only
// set bit in a given number
using System;
class GFG {
// A utility function to check whether
// n is power of 2 or not
static bool isPowerOfTwo( int n)
{
return n > 0 && ((n & (n - 1)) == 0);
}
// Returns position of the only set bit in 'n'
static int findPosition( int n)
{
if (!isPowerOfTwo(n))
return -1;
int count = 0;
// One by one move the only set bit
// to right till it reaches end
while (n > 0) {
n = n >> 1;
// increment count of shifts
++count;
}
return count;
}
// Driver code
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);
}
}
// This code is contributed by mits


PHP

<?php
// PHP program to find position of
// only set bit in a given number
// A utility function to check
// whether n is power of 2 or not
function isPowerOfTwo( $n )
{
return $n && (! ( $n & ( $n - 1)));
}
// Returns position of the
// only set bit in 'n'
function findPosition( $n )
{
if (!isPowerOfTwo( $n ))
return -1;
$count = 0;
// One by one move the only set
// bit to right till it reaches end
while ( $n )
{
$n = $n >> 1;
// increment count of shifts
++ $count ;
}
return $count ;
}
// Driver Code
$n = 0;
$pos = findPosition( $n );
if (( $pos == -1) == true)
echo "n = " , $n , ", " ,
" Invalid number" , "" ;
else
echo "n = " , $n , ", " ,
" Position " , $pos , "" ;
$n = 12;
$pos = findPosition( $n );
if (( $pos == -1) == true)
echo "n = " , $n , ", " ,
" Invalid number" , "" ;
else
echo "n = " , $n ,
" Position " , $pos , "" ;
$n = 128;
$pos = findPosition( $n );
if (( $pos == -1) == true)
echo "n = " , $n , ", " ,
" Invalid number" , "" ;
else
echo "n = " , $n , ", " ,
" Position " , $pos , "" ;
// This code is contributed by ajit
?>


Javascript

<script>
// JavaScript program to find position
// of only set bit in a given number
// A utility function to check whether
// n is power of 2 or not
function isPowerOfTwo(n) {
return (n && ( !(n & (n-1))))
}
// Returns position of the only set bit in 'n'
function findPosition(n) {
if (!isPowerOfTwo(n))
return -1
var count = 0
// One by one move the only set bit to
// right till it reaches end
while (n) {
n = n >> 1
// increment count of shifts
count += 1
}
return count
}
// Driver program to test above function
var n = 0
var pos = findPosition(n)
if (pos == -1)
document.write( "n = " , n, ", Invalid number " )
else
document.write( "n =" , n, ", Position " , pos)
document.write( "<br>" )
n = 12
pos = findPosition(n)
if (pos == -1)
document.write( "n = " , n, ", Invalid number" )
else
document.write( "n = " , n, ", Position " , pos)
document.write( "<br>" )
n = 128
pos = findPosition(n)
if (pos == -1)
document.write( "n = " , n, ", Invalid number" )
else
document.write( "n = " , n, ", Position " , pos)
document.write( "<br>" )
// This code is contributed by AnkThon
</script>


输出:

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

我们也可以使用log base 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;
}
// Driver code
int main( void )
{
int n = 0;
int pos = findPosition(n);
(pos == -1) ? cout<< "n = " <<n<< ", Invalid number" :
cout<< "n = " <<n<< ", Position " <<pos<< " " ;
n = 12;
pos = findPosition(n);
(pos == -1) ? cout<< "n = " <<n<< ", Invalid number" :
cout<< "n = " <<n<< ", Position " <<pos<< " " ;
n = 128;
pos = findPosition(n);
(pos == -1) ? cout<< "n = " <<n<< ", Invalid number" :
cout<< "n = " <<n<< ", Position " <<pos<< " " ;
return 0;
}
// This code is contributed by rathbhupendra


C

#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;
}
// Driver program to test above function
int main( void )
{
int n = 0;
int pos = findPosition(n);
(pos == -1) ? printf ( "n = %d, Invalid number" , n) : printf ( "n = %d, Position %d " , n, pos);
n = 12;
pos = findPosition(n);
(pos == -1) ? printf ( "n = %d, Invalid number" , n) : printf ( "n = %d, Position %d " , n, pos);
n = 128;
pos = findPosition(n);
(pos == -1) ? printf ( "n = %d, Invalid number" , n) : printf ( "n = %d, Position %d " , n, pos);
return 0;
}


JAVA

// Java program to find position
// of only set bit in a given number
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 ;
}
// Driver code
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);
}
}
// This code is contributed by mits


Python3

# Python program to find position
# of only set bit in a given number
def Log2n(n):
if (n > 1 ):
return ( 1 + Log2n(n / 2 ))
else :
return 0
# A utility function to check
# whether n is power of 2 or not
def isPowerOfTwo(n):
return n and ( not (n & (n - 1 )) )
def findPosition(n):
if ( not isPowerOfTwo(n)):
return - 1
return Log2n(n) + 1
# Driver program to test above function
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)
# This code is contributed
# by Sumit Sudhakar


C#

// C# program to find position
// of only set bit in a given number
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;
}
// Driver program to test above function
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);
}
}
// This code is contributed by mits


PHP

<?php
// PHP program to find position
// of only set bit in a given number
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;
}
// Driver Code
$n = 0;
$pos = findPosition( $n );
if (( $pos == -1) == true)
echo "n =" , $n , ", " ,
" Invalid number" , "" ;
else
echo "n = " , $n , ", " ,
" Position n" , $pos , "" ;
$n = 12;
$pos = findPosition( $n );
if (( $pos == -1) == true)
echo "n = " , $n , ", " ,
" Invalid number" , "" ;
else
echo "n =" , $n , ", " ,
" Position" , $pos , "" ;
// Driver Code
$n = 128;
$pos = findPosition( $n );
if (( $pos == -1) == true)
echo "n = " , $n , ", " ,
" Invalid number" , "" ;
else
echo "n = " , $n , ", " ,
" Position " , $pos , "" ;
// This code is contributed by aj_36
?>


Javascript

<script>
// JavaScript program to find position
// of only set bit in a given number
function Log2n(n){
if (n > 1)
return (1 + Log2n(n / 2))
else
return 0
}
// A utility function to check
// whether n is power of 2 or not
function isPowerOfTwo(n){
return n && ( ! (n & (n-1)) )
}
function findPosition(n){
if (isPowerOfTwo(n) == false )
return -1
return Log2n(n) + 1
}
// Driver program to test above function
var n = 0
var pos = findPosition(n)
if (pos == -1)
document.write( "n = " , n, ", Invalid number" )
else
document.write( "n = " , n, ", Position " , pos)
document.write( "<br>" )
n = 12
pos = findPosition(n)
if (pos == -1)
document.write( "n = " , n, ", Invalid number" )
else
document.write( "n = " , n, ", Position " , pos)
document.write( "<br>" )
n = 128
pos = findPosition(n)
if (pos == -1)
document.write( "n = " , n, ", Invalid number" )
else
document.write( "n = " , n, ", Position " , pos)
// This code is contributed AnkThon
</script>


输出:

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

本文由 纳伦德拉·康拉尔卡 。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请发表评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享