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

📅  最后修改于: 2021-05-25 05:02:19             🧑  作者: Mango

先决条件:
C / C++和应用程序中的INT_MAX和INT_MIN。
算术移位与逻辑移位
假设您有一个32位系统:
INT_MAX将为01111111111111111111111111111111111,而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++
// 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();
    }
}


Javascript


输出:

INT_MAX 2147483647 INT_MIN -2147483648