📜  使用按位运算计算INT_MAX和INT_MIN

📅  最后修改于: 2021-04-29 02:18:56             🧑  作者: Mango

先决条件:
C / C++和应用程序中的INT_MAX和INT_MIN。
算术移位与逻辑移位

假设您有一个32位系统:
INT_MAX将为01111111111111111111111111111111和INT_MIN将为10000000000000000000000000000000000000 。最高有效位位置的0和1分别代表符号位。

在C / C++中计算INT_MAX和INT_MIN:
数字0表示为000…000 (32次)。

  • 我们计算0的NOT以获得32个1的数字。该数字不等于INT_MAX,因为符号位为1,即负数。
  • 现在,此数字的右移将产生011…111 ,即INT_MAX。
  • INT_MIN不是INT_MAX。

笔记 :
0应该被视为unsigned int。

原因 :
如果签名为0,则在步骤2中,向右移111..111将产生111…111。这是因为算术右移保留了数字的符号。
在Java,我们具有逻辑右移的功能。

C/C++
// CPP code to compute INT_MAX and INT_MIN using
// bitwise operations
#include 
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();
    }
}


输出:

INT_MAX 2147483647 INT_MIN -2147483648

询问:谷歌