今天在复习java的Java基础常见面试题时对java中基本数据类型的上下限有了一些思考,接下来我会结合自身的理解进行讲述
Java 中有 8 种基本数据类型,分别为:6 种数字类型:
4 种整数型:byte、short、int、long
2 种浮点型:float、double
1 种字符类型:char
1 种布尔型:boolean。
我们先单独来看int类型
java中int类型的包装类为Integer,我们来看一下它的源代码
public final class Integer extends Number
implements Comparable<Integer>, Constable, ConstantDesc {
/**
* A constant holding the minimum value an {@code int} can
* have, -231.
*/
@Native public static final int MIN_VALUE = 0x80000000;
/**
* A constant holding the maximum value an {@code int} can
* have, 231-1.
*/
@Native public static final int MAX_VALUE = 0x7fffffff;
/**
* The {@code Class} instance representing the primitive type
* {@code int}.
*
* @since 1.1
*/
@SuppressWarnings("unchecked")
public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass("int");
/**
* All possible chars for representing a number as a String
*/
static final char[] digits = {
'0' , '1' , '2' , '3' , '4' , '5' ,
'6' , '7' , '8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
'o' , 'p' , 'q' , 'r' , 's' , 't' ,
'u' , 'v' , 'w' , 'x' , 'y' , 'z'
};
我们可以通过Max_VALUE和MIN_VALUE轻易的获取到int类型的上下限
我们发现int类型的范围是-2147483648 ~ 2147483647
正数相对于负数减 1 了。这是为什么呢?这是因为在二进制补码表示法中,最高位是用来表示符号的(0 表示正数,1 表示负数),其余位表示数值部分。所以,如果我们要表示最大的正数,我们需要把除了最高位之外的所有位都设为 1。如果我们再加 1,就会导致溢出,变成一个负数。
而补码表示法中正数的补码等于其二进制表示也就是说int类型的最大值为01111111.。。。。等于2的31次方-1
而最小值为其绝对值的二进制表示法取反加1,最终可以获得的最小数即为10000.。。。。等于-2的31次方
如果仅仅是用第一位作为符号为,但是用普通的二进制表示法的话,对于正数来说,可以表示的最大数并没有变化,但是对于负数则变成了
-2的31次方-1,少表示了一个数
以上仅为个人理解,如果错误欢迎指出