Java中的整型数据类型学习

Java中的整数有四个不同的表示范围类型:其分别是
byte (1个字节)
short (2个字节)
int (4个字节)
long (8个字节)

Java中,一个整型字面量(Integer Literals)其默认的类型是int类型的,还存在另外一个整数字面值常量,它是long类型的。

例如:数字1在内存中存储时,Java编译器认为这个值是一个int类型而将其存储在常量池中,而1L则会以64个位来存储。

(1)当一个整数字面值其范围在byte或者short范围内的时候,将该值赋值给byte或者short变量的时候,Java编译器可以自动地将使用byte或者short类型的变量来存储该字面量的值。

 1         /*

 2          * 1.对于一个int类型的字面量(其范围在byte或者short可以存储的范围内)在 赋值给byte或者short类型的时候,

 3          *   Java编译器可以自动将数据使用byte类型或者short类型来进行处理。

 4          */

 5         byte b1 = 100;

 6         short s1 = 200;    

 7         //编译器可以识别到这个值的范围大于了byte类型的存储范围时,那么编译会出错

 8         b1 = 128;

 9             

10          /*

11          * 2.当将一个整型字面值赋值给long类型的变量,字面值依旧是int类型,

12          *   但是编译器会使用64个位的long类型变量来存储该字面值。

13          */

14         long x = 129;

15         System.out.println(x);

16                 

17          /*

18          * 虽然字i面值在long类型的存储范围之内,但是99999999999已经超过了int类型的最大存储范围,不要忘了,字面值永远是拿着4个位来存储。

19          * 所以需要注意:使用的整型字面值不能超过int的存储范围,下面代码编译失败

20          */

21         x = 99999999999; 

那么如何存储一个大于2147483647(int类型最大存储范围)?

使用long类型的字面值。

1     //告诉编译器这是一个long类型的字面值

2     x = 99999999999L;

3     

4         //小细节:只能使用整型字面值赋值,下面代码编译出错

5         //一个小细节:Java只能使用整型字面值赋值给short或者byte,不能使用long类型字面值赋值给byte或者short。

6     b1 = 1L;

(2)整型字面值的4种表示方式:

 

 1          /*3.整型字面值的表示形式

 2          *  十进制

 3          *  八进制

 4          *  十六进制

 5          *  二进制 

 6          */ 

 7         //十进制赋值

 8         int i1 = 26;    

 9         //八进制赋值,以0开头

10         int i2 = 032; //3*8 + 2  = 26        

11         //十六进制赋值,以0x开头

12         int i3 = 0x1a;

13         //二进制赋值,以0b开头

14         int i4 = 0b00011010;

15                 

16                 //在使用八进制赋值的时候,不能出现大于8的数,下面代码编译出错

17         int i5= 098;

18                 

19                //long类型字面值也可以使用这4中进制来表示

20         long l1 = 25L;

21         long l2 = 026L; //22

22         long l3 = 0X16L;

23         long l4 = 0B10110L;

(3)整数在内存中的存储,都是以其补码的形式进行存储。如果一个数是正数,那么这个数的补码就是这个数的原码。如果一个数是负数,那么它的补码就是其绝对值的原码全部取反+1。

        int a = Integer.MAX_VALUE;

        a = a + 1;

        //此时造成了数据溢出的问题,原因在于得到的结果是1后面跟着31个0.

        //通过二进制一推就可以知道该二进制就是-2147483648

        System.out.println(a);    

 

你可能感兴趣的:(java)