黑马程序员---Java中的整型数据类型学习

       ------------Android培训、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);    
 
 
 
 
------------Android培训、Java培训、期待与您交流----------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值