数据类型的表示范围划分

数据类型的范围划分

为什么数据类型(这里以byte类型为例)的的表示范围正数和负数的范围不同呢?

这里先引入几个概念

计算机为什么使用2进制。

计算机的重要组成原件 —— 二极管,简单理解为沿某一方向通电,反向不通电的电子元器件,通电的状态记作1,不通电记作0。
可知二极管只有0、1两种状态。
人类生产生活使用的是10进制,即0 ~ 9。(10根手指,掰指头数数)
计算机使用的二进制。(只有0、1两种状态)。

计算机中的位,字节

1、位:位表示的是二进制位,一般称为比特,是计算机存储的最小单位。(即一个二极管)
表示范围:0 ~ 1

2、字节:字节是计算机中数据处理的基本单位。计算机中以字节为单位存储和解 释信息,规定一个字节由八个二进制位构成,即1个字节等于8个比特,计算机存储数据时以8个二极管为一个单元。
表示范围:00000000 ~ 11111111 即0~256

解答

byte 数据类型是8位:

最小值是 -128(-2^7);
最大值是 127(2^7-1);

根据前文引入的概念,我们可以知道计算机将使用8位,即8个二极管作为一组来存储一个 byte ,这8个二极管状态共有多少种组合呢?
2^8
即:
00000000
00000001
00000010

11111101
11111110
11111111

那么怎么表示负数呢?
计算机将第一位作为标记,为1表示正数,为0表示负数;

00000001 表示-1
10000001 表示+1

这样一来,正负的表示范围就各为2^7
为什么实际上正数的表示范围是2^7-1呢?
因为 0
00000000 这是0
负数范围:最小值 ~ 0
正数范围:0 ~ 最大值
显然 0 只有一个,只能计算一次
从正负表示规则看,0划给了负数那一边,所以正数就少一个,即2^7-1。

观察其他类似数据类型类型,可以发现都是正数那一边-1。

你可能感兴趣的:(java)