Cálculo de INT_MAX e INT_MIN con operaciones bit a bit

Requisitos previos: 
INT_MAX e INT_MIN en C/C++ y Aplicaciones. 
Desplazamiento aritmético frente a desplazamiento lógico
Suponga que tiene un sistema de 32 bits: 
INT_MAX sería 01111111111111111111111111111111 e INT_MIN sería 100000000000000000000000000000000 . 0 y 1 en la posición de bit más significativa que representa el bit de signo, respectivamente.
Cálculo de INT_MAX e INT_MIN en C/C++: 
El número 0 se representa como 000…000 (32 veces). 
 

  • Calculamos el NOT de 0 para obtener un número con 32 1s. Este número no es igual a INT_MAX porque el bit de signo es 1, es decir, un número negativo.
  • Ahora, un desplazamiento a la derecha de este número producirá 011…111 que es INT_MAX.
  • INT_MIN NO es de INT_MAX.

Nota: 
0 debe tomarse como int sin signo.
Motivo: 
si se firma 0, durante el Paso 2, el desplazamiento a la derecha de 111…111 producirá 111…111. Esto se debe a que el desplazamiento aritmético a la derecha conserva el signo del número. 
En Java, tenemos disponible la función de desplazamiento lógico a la derecha. 
 
 

C++

// CPP code to compute INT_MAX and INT_MIN using
// bitwise operations
#include <bits/stdc++.h>
using namespace std;
 
void printMinMaxValues()
{
    // 0 saved as unsigned int
    unsigned int max = 0;
 
    // Computing NOT of 0
    max = ~max;
     
    // 1 time arithmetic right shift
    max = max >> 1;
     
    // Computing INT_MIN
    int min = max;
     
    // INT_MIN = ~INT_MAX
    min = ~min;
     
    // Printing the result
    cout << "INT_MAX : " << max
        << " INT_MIN : " << min;
}
 
// Driver code
int main()
{
    printMinMaxValues();
    return 0;
}

Java

// Java code to compute INT_MAX and INT_MIN using
// bitwise operations
public class Solution
{
    static void printMinMaxValues()
    {
        int max = 0;
     
        // Computing NOT of 0
        max = ~max;
 
        // 1 time logical right shift for INT_MAX
        max = max >>> 1;
         
        // Computing INT_MIN
        int min = max;
         
        // INT_MIN = ~INT_MAX
        min = ~max;
     
        // Printing the result
        System.out.println("INT_MAX " + max +
                           " INT_MIN " + min);
    }
 
    public static void main(String[] args)
    {
        printMinMaxValues();
    }
}

Python3

# Python3 code to compute INT_MAX and INT_MIN using
# bitwise operations
def printMinMaxValues():
  
    # 0 saved as unsigned int
    max = 0
 
    # Computing NOT of 0
    #to signed integer to unsigned integer
    #in Python3, add 1 << 32 to the integer
    max = ~max + (1 << 32)
     
    # 1 time arithmetic right shift
    max = max >> 1
     
    # Computing INT_MIN
    min = max;
     
    # INT_MIN = ~INT_MAX
    min = ~min
     
    # Printing the result
    print("INT_MAX :", max, "INT_MIN :", min)
 
# Driver code
printMinMaxValues()
 
# This code is contributed by phasing17

C#

// C# code to compute INT_MAX and INT_MIN using
// bitwise operations
 
using System;
 
public class GFG
{
    static void printMinMaxValues()
    {
        // 0 saved as unsigned int
        uint max = 0;
     
        // Computing NOT of 0
        max = ~max;
         
        // 1 time arithmetic right shift
        max = max >> 1;
         
        // Computing INT_MIN
        int min = (int)max;
         
        // INT_MIN = ~INT_MAX
        min = ~min;
     
        // Printing the result
        Console.WriteLine("INT_MAX " + max +
                           " INT_MIN " + min);
    }
     
    //Driver code
    public static void Main(string[] args)
    {
        //Function call
        printMinMaxValues();
    }
}
 
//This code is contributed by phasing17

Javascript

<script>
 
// Javascript code to compute INT_MAX and INT_MIN using
// bitwise operations
 
    function printMinMaxValues()
    {
        let max = 0;
       
        // Computing NOT of 0
        max = ~max;
   
        // 1 time logical right shift for INT_MAX
        max = max >>> 1;
           
        // Computing INT_MIN
        let min = max;
           
        // INT_MIN = ~INT_MAX
        min = ~max;
       
        // Printing the result
        document.write("INT_MAX - " + max +
                           ", INT_MIN " + min);
    }
     
// driver program
     
        printMinMaxValues();
 
// This code is contributed by code_hunt.
</script>

Producción: 
 

INT_MAX 2147483647 INT_MIN -2147483648

Complejidad del tiempo – O(1)

Complejidad espacial – O(1)

Preguntado en: Google 
Este artículo es una contribución de Rohit Thapliyal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *