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)