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 program to find if a number is
// positive, negative or zero using
// bit wise operators.
#include <iostream>
using namespace std;
// function to return 1 if it is zero
// returns 0 if it is negative
// returns 2 if it is positive
int index(int i)
{
return 1 + (i >> 31) - (-i >> 31);
}
void check(int n)
{
// string array to store all kinds of number
string s[] = { "negative", "zero", "positive" };
// function call to check the sign of number
int val = index(n);
cout << n << " is " << s[val] << endl;
}
// driver program to test the above function
int main()
{
check(30);
check(-20);
check(0);
return 0;
}
// Java program to find if a number is
// positive, negative or zero using
// bit wise operators.
class GFG {
// function to return 1 if it is zero
// returns 0 if it is negative
// returns 2 if it is positive
static int index(int i)
{
return 1 + (i >> 31) - (-i >> 31);
}
static void check(int n)
{
// string array to store all kinds
// of number
String s[] = { "negative", "zero",
"positive" };
// function call to check the sign
// of number
int val = index(n);
System.out.println(n + " is " + s[val]);
}
// Driver code
public static void main(String[] args)
{
check(30);
check(-20);
check(0);
}
}
// This code is contributed by Anant Agarwal.
# Python 3 program to
# find if a number is
# positive, negative
# or zero using
# bit wise operators.
# function to return 1 if it is zero
# returns 0 if it is negative
# returns 2 if it is positive
def index(i):
return 1 + (i >> 31) - (-i >> 31)
def check(n):
# string array to store all kinds of number
s = "negative", "zero", "positive"
# function call to check the sign of number
val = index(n)
print(n,"is",s[val])
# driver program to
# test the above function
check(30)
check(-20)
check(0)
# This code is contributed by
# Smitha Dinesh Semwal
// C# program to find if a number is
// positive, negative or zero using
// bit wise operators.
using System;
class GFG {
// function to return 1 if it is zero
// returns 0 if it is negative
// returns 2 if it is positive
static int index(int i)
{
return 1 + (i >> 31) - (-i >> 31);
}
static void check(int n)
{
// string array to store all kinds of number
String []s = { "negative", "zero", "positive" };
// function call to check the sign of number
int val = index(n);
Console.WriteLine(n + " is " + s[val]);
}
//Driver code
public static void Main()
{
check(30);
check(-20);
check(0);
}
}
// This code is contributed by Anant Agarwal.
<?php
// PHP program to find if a number is
// positive, negative or zero using
// bit wise operators.
// function to return 1 if it is zero
// returns 0 if it is negative
// returns 2 if it is positive
function index($i)
{
return 1 + ($i >> 31) -
(-$i >> 31);
}
function check($n)
{
// string array to store
// all kinds of number
$s = array("negative", "zero", "positive" );
// function call to check
// the sign of number
$val = index($n);
echo $n, " is ", $s[$val], "\n";
}
// Driver Code
check(30);
check(-20);
check(0);
// This code is contributed by Ajit
?>
// JavaScript program to find if a number is positive, negative or zero
// function to return 1 if it is zero, 0 if it is negative, and 2 if it is positive
function index(i) {
return 1 + (i >> 31) - (-i >> 31);
}
function check(n) {
// string array to store all kinds of number
let s = ["negative", "zero", "positive"];
// function call to check the sign of number
let val = index(n);
console.log(`${n} is ${s[val]}`);
}
// driver program to test the above function
check(30);
check(-20);
check(0);
Output:
30 is positive -20 is negative 0 is zero
Time Complexity : O(1)
Space Complexity : O(1)