Comprobar si un número es positivo, negativo o cero usando operadores de bits

Dado un número N, verifique si es positivo, negativo o cero sin usar declaraciones condicionales.
Ejemplos: 
 

Input : 30
Output : 30 is positive

Input : -20
Output : -20 is negative

Input: 0
Output: 0 is zero

El cambio con signo n>>31 convierte todos los números negativos en -1 y todos los demás en 0. 
Cuando hacemos un -n>>31, si es un número positivo, devolverá -1 como estamos haciendo -n>> 31 y viceversa cuando lo hacemos para un número negativo. 
Pero cuando lo hacemos para 0, entonces n>>31 y -n>>31 devuelven 0, por lo que obtenemos una fórmula:
 

1 + (n>>31) – (-n>>31)

..1) cuando n es negativo
1 +(-1)-0=0
..2) cuando n es positivo: 
1+0-(-1)=2
..3) cuando n es 0: 
1+0 -0=1 
Entonces sabemos que devuelve 0 cuando es un número negativo, devuelve 1 cuando es cero, devuelve 2 cuando es un número positivo.
Entonces, para no usar declaraciones if, almacenamos en el índice 0 «negativo», el índice 1 «cero» y en el índice 2 «positivo», e imprimimos de acuerdo con él. 
 

CPP

// 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

// 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.

Python3

# 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#

// 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
// 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

<script>
 
// JavaScript 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
        let s = [ "negative", "zero", "positive" ];
   
        // function call to check the sign of number
        let val = index(n);
   
        document.write(n + " is " + s[val] + "<br>");
    }
   
// driver program to test the above function
 
    check(30);
    check(-20);
    check(0);
     
 
// This code is contributed by Surbhi Tyagi
 
</script>

Producción: 
 

30 is positive
-20 is negative
0 is zero

Complejidad de tiempo : O(1)

Complejidad espacial : O(1)
 

Publicación traducida automáticamente

Artículo escrito por Striver y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *