先决条件:
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
询问:谷歌