4.3 INT_MAX和INT_MIN


假设

假设您有一个 32 位系统:

  • INT_MAX是 01111111111111111111111111111111 ;
  • INT_MIN是 10000000000000000000000000000000 ;

0 和 1 分别位于最高有效位位置,分别表示符号位。

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

原理

我们计算 0 的 NOT 得到一个有 32 个 1 的数字。这个数字不等于INT_MAX因为符号位是1,即负数。 现在,这个数字的右移将产生011…111 这是INT_MAX。 将INT_MAX 按位取反 就得到INT_MIN。

代码

unsigned int max = 0;
 
max = ~max;
max = max >> 1;
     
int min = ~max;