Check if a number is positive, negative or zero using bit operators
Last Updated :
06 Feb, 2023
Given a number N, check if it is positive, negative or zero without using conditional statements.
Examples:
Input : 30
Output : 30 is positive
Input : -20
Output : -20 is negative
Input: 0
Output: 0 is zero
The signed shift n>>31 converts every negative number into -1 and every other into 0.
When we do a -n>>31, if it is a positive number then it will return -1 as we are doing -n>>31 and the vice versa when we do for a negative number.
But when we do for 0 then n>>31 and -n>>31 both returns 0, so we get a formula:
1 + (n>>31) – (-n>>31)
..1) when n is negative :
1 +(-1)-0=0
..2) when n is positive:
1+0-(-1)=2
..3) when n is 0:
1+0-0=1
So we know it returns 0 when it is a negative number, it returns 1 when it is zero, returns 2 when it is a positive number.
So to not use if statements we store at 0th index “negative”, 1st index “zero” and at 2nd index “positive”, and print according to it.
CPP
#include <iostream>
using namespace std;
int index( int i)
{
return 1 + (i >> 31) - (-i >> 31);
}
void check( int n)
{
string s[] = { "negative" , "zero" , "positive" };
int val = index(n);
cout << n << " is " << s[val] << endl;
}
int main()
{
check(30);
check(-20);
check(0);
return 0;
}
|
Java
class GFG {
static int index( int i)
{
return 1 + (i >> 31 ) - (-i >> 31 );
}
static void check( int n)
{
String s[] = { "negative" , "zero" ,
"positive" };
int val = index(n);
System.out.println(n + " is " + s[val]);
}
public static void main(String[] args)
{
check( 30 );
check(- 20 );
check( 0 );
}
}
|
Python3
def index(i):
return 1 + (i >> 31 ) - ( - i >> 31 )
def check(n):
s = "negative" , "zero" , "positive"
val = index(n)
print (n, "is" ,s[val])
check( 30 )
check( - 20 )
check( 0 )
|
C#
using System;
class GFG {
static int index( int i)
{
return 1 + (i >> 31) - (-i >> 31);
}
static void check( int n)
{
String []s = { "negative" , "zero" , "positive" };
int val = index(n);
Console.WriteLine(n + " is " + s[val]);
}
public static void Main()
{
check(30);
check(-20);
check(0);
}
}
|
PHP
<?php
function index( $i )
{
return 1 + ( $i >> 31) -
(- $i >> 31);
}
function check( $n )
{
$s = array ( "negative" , "zero" , "positive" );
$val = index( $n );
echo $n , " is " , $s [ $val ], "\n" ;
}
check(30);
check(-20);
check(0);
?>
|
Javascript
function index(i) {
return 1 + (i >> 31) - (-i >> 31);
}
function check(n) {
let s = [ "negative" , "zero" , "positive" ];
let val = index(n);
console.log(`${n} is ${s[val]}`);
}
check(30);
check(-20);
check(0);
|
Output:
30 is positive
-20 is negative
0 is zero
Time Complexity : O(1)
Space Complexity : O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...