Java中数据类型的取值范围

整数数据类型的取值范围

我们都知道计算机的底层是二进制,也知道不同的整数类型存储值的范围不同,可这些数值在计算机底层是怎样存储的呢?数值范围又是怎么计算出来的呢?
下面以java来进行举例:

byte	1个字节 (8bit)		-2^7~2^7-1	
short	2个字节 (16bit)	-2^16~2^16-1
int		4个字节 (32bit)	-2^31~2^31-1
long	8个字节 (64bit)	-2^63~2^63-1

整数数据类型其中最高位是符号位,用来表示正数或负数。其中0用来表示正数,1用来表示负数。
那么,剩下的位就是数值位,用来表示数值大小的。

那么byte的可用范围就是7位了:
从 000 0000 ~ 111 1111 转换成十进制也就是从 0 ~ 127

如果加上符号位呢?
1111 1111 ~ 0111 1111 转换成十进制是从 -127 ~ 127
可是如果我们的 111 1111 还能再进一位呢?
那不就是变成 1000 0000了吗,那这个数到底是用来表示-128还是128呢?
因为符号位的存在,如果让它来表示128的话,就乱套了,所以我们就规定只用它来表示正的128。

所以一个字节能表示的最大范围是从 -2^7 ~ 2^7-1 ps:2^7是128

无符号类型的取值范围(char)

Java中的char类型是用两个字节来表示,使用的是Unicode编码,所以可以正常表示中文字符。
两个字节一共十六位,又因为没有符号位,都是数值位的原因,所以表值范围是从:
0000 0000 0000 0000 ~ 1111 1111 1111 1111 1111 1111 (65535)

所以char类型的表值范围是从 0 ~ 2^16-1

posted @ 2015-12-05 23:02  Drea1m  阅读(10028)  评论(2编辑  收藏  举报