Dados dos números enteros A y B , la tarea es encontrar el máximo de dos números utilizando operadores bit a bit .
Ejemplos:
Entrada: A = 40, B = 54
Salida: 54Entrada: A = -1, B = -10
Salida: -1
Enfoque: La idea es usar el Operador bit a bit , así como el Operador de desplazamiento a la derecha para encontrar el número más grande entre dos números distintos sin usar declaraciones condicionales (si …) y Operador ternario (?:) . A continuación se muestran los pasos:
- Encuentre el valor máximo sobre la base de la siguiente expresión:
z = A – B
i = (z >> 31) & 1
máx = a – (i*z)
- Resta dos números y guárdalo en otra variable z .
- Para obtener el signo del número obtenido después de la resta, aplique Desplazamiento a la derecha a la variable z y guárdelo en otra variable i y luego realice la operación Bitwise AND en la variable i con 1 para obtener valores en 1 o 0 .
- Realice la siguiente expresión para obtener el valor más grande entre los dos números dados como max = (a – (i * z)) .
Ilustración:
A = 40, B = 54
z = (A – B) = 40 – 54 = -14
i = -1 & 1 = 1
máx = a – (i * z) = (40 – (1 * -14)) = 54
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for above approach #include <iostream> using namespace std; // Function to find the largest number int findMax(int a, int b) { int z, i, max; // Perform the subtraction z = a - b; // Right shift and Bitwise AND i = (z >> 31) & 1; // Find the maximum number max = a - (i * z); // Return the maximum value return max; } // Driver Code int main() { int A = 40, B = 54; // Function Call cout << findMax(A, B); return 0; }
C
// C program for the above approach #include <stdio.h> // Function to find the largest number int findMax(int a, int b) { int z, i, max; // Perform the subtraction z = a - b; // Right shift and Bitwise AND i = (z >> 31) & 1; // Find the maximum number max = a - (i * z); // Return the maximum value return max; } // Driver Code int main() { int A = 40, B = 54; // Function Call printf("%d", findMax(A, B)); return 0; }
Java
// Java program for above approach import java.io.*; class GFG { // Function to find the largest number public static int findMax(int a, int b) { int z, i, max; // Perform the subtraction z = a - b; // Right shift and Bitwise AND i = (z >> 31) & 1; // Find the maximum number max = a - (i * z); // Return the maximum value return max; } // Driver Code public static void main (String[] args) { int A = 40, B = 54; // Function Call System.out.println(findMax(A, B)); } } // This code is contributed by Shubham Singh
Python3
# Python program for the above approach # Function to find the largest number def findmaxx(a, b): # Perform the subtraction z = a - b # Right shift and Bitwise AND i = (z >> 31) & 1 # Find the maxximum number maxx = a - (i * z) # Return the maxximum value return maxx # Driver Code A = 40 B = 54 # Function Call print(findmaxx(A, B)) # This code is contributed by Shubham Singh
Javascript
<script> // Javascript program for above approach // Function to find the largest number function findMax(a, b) { var z, i, max; // Perform the subtraction z = a - b; // Right shift and Bitwise AND i = (z >> 31) & 1; // Find the maximum number max = a - (i * z); // Return the maximum value return max; } // Driver Code var A = 40, B = 54; // Function Call document.write(findMax(A, B)); // This code is ocntributed by shubham singh </script>
54
Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por ritikumariupadhyay24 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA