Java中int的取值范围是怎么计算的

计算思路有很多更高级的,我这里说一种最死板的思路。
首先我们知道,Java中int占4个字节,也就是32位。32位是什么概念?直接看下面对应关系,简单粗暴,前提你要知道最高位是标志位,0为正数1为负数

max = 01111111 11111111 11111111 11111111
 ...
  4 = 00000000 00000000 00000000 00000100
  3 = 00000000 00000000 00000000 00000011
  2 = 00000000 00000000 00000000 00000010
  1 = 00000000 00000000 00000000 00000001
  0 = 00000000 00000000 00000000 00000000
 -1 = 11111111 11111111 11111111 11111111
 -2 = 11111111 11111111 11111111 11111110
 -3 = 11111111 11111111 11111111 11111101
 -4 = 11111111 11111111 11111111 11111100
 ...
min = 10000000 00000000 00000000 00000000

由上面我们可以知道int的取值范围就是 [10000000 00000000 00000000 00000000 , 01111111 11111111 11111111 11111111]
01111111 11111111 11111111 11111111转成十进制容易算,就是2的31次方减1,所以max=21474836487
那么10000000 00000000 00000000 00000000转成十进制是多少呢?先了解一下负数的十进制和二进制的转换。

负数十进制转二进制 - 取反加1

取反加1,很简单,比如-666转成二进制,就是11111111 11111111 11111101 01100110,如下:

// 首先正数666的二进制是
00000000 00000000 00000010 10011010
// 取反
11111111 11111111 11111101 01100101
// 加1
11111111 11111111 11111101 01100110
负数二进制转十进制 - 减1取反

减1取反,也很简单,比如11111111 11111111 11111100 10001000转成十进制,就是-888,如下:

// 二进制原数
11111111 11111111 11111100 10001000
// 减1
11111111 11111111 11111100 10000111
// 取反
00000000 00000000 00000011 01111000
// 转成十进制
888
那么原来的问题,10000000 00000000 00000000 00000000是多少呢
// 原负数
10000000 00000000 00000000 00000000
// 减1
01111111 11111111 11111111 11111111
// 取反
10000000 00000000 00000000 00000000
// 转成十进制
2147483648

所以10000000 00000000 00000000 00000000=-2147483648,
所以min=-2147483648,前面已经算出max=21474836487
所以int的取值范围就是[-2147483648,21474836487],也就是-2的31次方 到 2的31次方减1

你可能感兴趣的:(Java中int的取值范围是怎么计算的)