Calcule un máximo de dos enteros en C/C++ usando operadores bit a bit

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: 54

Entrada: 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>
Producción: 

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

Deja una respuesta

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