开发者社区> 问答> 正文

整型中byte、short、int、long的取值范围

整型中byte、short、int、long的取值范围

展开
收起
montos 2020-06-01 16:00:05 1221 0
1 条回答
写回答
取消 提交回答
  • Java中的整型主要包含byte、short、int和long这四种,表示的数字范围也是从小到大的,之所以表示范围不同主要和他们存储数据时所占的字节数有关。

    先来个简答的科普,1字节=8位(bit)。java中的整型属于有符号数。

    先来看计算中8bit可以表示的数字: 最小值:10000000 (-128)(-2^7) 最大值:01111111(127)(2^7-1) 具体计算方式参考:Java中,为什么byte类型的取值范围为-128~127? - CSDN博客

    整型的这几个类型中,

      byte:byte用1个字节来存储,范围为-128(-2^7)到127(2^7-1),在变量初始化的时候,byte类型的默认值为0。

      short:short用2个字节存储,范围为-32,768 (-2^15)到32,767 (2^15-1),在变量初始化的时候,short类型的默认值为0,一般情况下,因为Java本身转型的原因,可以直接写为0。

      int:int用4个字节存储,范围为-2,147,483,648 (-2^31)到2,147,483,647 (2^31-1),在变量初始化的时候,int类型的默认值为0。

      long:long用8个字节存储,范围为-9,223,372,036,854,775,808 (-2^63)到9,223,372,036, 854,775,807 (2^63-1),在变量初始化的时候,long类型的默认值为0L或0l,也可直接写为0。

    上面说过了,整型中,每个类型都有一定的表示范围,但是,在程序中有些计算会导致超出表示范围,即溢出。如以下代码:

        int i = Integer.MAX_VALUE;
        int j = Integer.MAX_VALUE;
    
        int k = i + j;
        System.out.println("i (" + i + ") + j (" + j + ") = k (" + k + ")");
    

    输出结果:i (2147483647) + j (2147483647) = k (-2)

    这就是发生了溢出,溢出的时候并不会抛异常,也没有任何提示。所以,在程序中,使用同类型的数据进行运算的时候,一定要注意数据溢出的问题。

    2020-06-01 16:00:31
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载